我正在写一些代码在飞船假想气闸系统,我用这个方法来随机生成的两个随机一个门被打开:Java线程和空指针错误
while (true){
int doorNum = (int)((Math.random() * 10) % doors.length);
doors[doorNum].requestToOpen();
try{
Thread.sleep(800);
}
catch(InterruptedException ex){
ex.printStackTrace();
}
}
它由两个数组挑选出一个可能的门,在运行的AirLockDoor类我试图确认该请求,然后登录下来:
public void requestToOpen() {
System.out.println(doorName + " requests to be opened");
if(doorName.equals("Door 1")){
Door1Status = true;
}
else if (doorName.equals("Door 2")){
Door2Status = true;
}
}
并在这里,doorName变量正常工作,它会打印出门1 /门2请求被打开。但是当我尝试记录请求时,它变得很奇怪。我试着将它存储为一个字符串,并将其作为一个布尔值,通过设置变量等于doorName。如果我调试它,它确实有效,并且新的值被设置。但是,只要我想要在runnable的run()方法中使用该值,那么该值就会变为空,并且程序会抛出一个空异常错误,并且我不知道发生了什么问题。所以,这里的任何想法将是非常赞赏
这是我的run方法,它完全忽略了,如果,如果其他人,去直取东西:
public synchronized void run() {
while (true){
if(lockOperator.isLockState()){
System.out.println("Request denied, the lock is engaged");
}
else{
if(Door1Status){
System.out.println("Door 1 will open");
}
else if(Door2Status){
System.out.println("Door 2 will open");
}
else{
System.out.println("Else");
}
}
}
}
在哪一行不例外发生? –
在运行方法中,我将它添加到主帖 –
这意味着lockOperator或Door1Status和Door2Status之一尚未初始化。 –