我正在寫一些代碼在飛船假想氣閘系統,我用這個方法來隨機生成的兩個隨機一個門被打開: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之一尚未初始化。 –