我的主類稱爲MainClass
,它有在它下面的代碼:值在父類沒有改變
Startup startup = new Startup();
while (!startup.isDoneWelcoming()){
System.out.print("Waiting for welcoming to finish."+br);
try{Thread.sleep(5000);}catch(Exception waitEx){System.out.print(waitEx+br);}
}
而且它會檢查從另一個類稱爲Startup
具有此代碼值:
private boolean doneWelcoming=false;
void openWelcomeScreen(){
//irrelevant code...
//a welcome screen is displayed and when "get started" button is pressed
//it opens a new window from the Tutorial class
WelcomeScreen welcomeScreen = new WelcomeScreen();
welcomeScreen.openWelcomeScreen();
//irrelevant code...
}
void setWelcomeStatus(){
System.out.print("Boolean \"doneWelcoming\" is true."+br);
doneWelcoming=true;
}
public boolean isDoneWelcoming(){
System.out.print("Boolean \"doneWelcoming\" value returned as: "+doneWelcoming+br);
return doneWelcoming;
}
的WelcomeScreen
類extends
從Startup
和具有這個代碼發起內的方法類:
void createTutorialWindow(){
//ActionListener detects when the button is pressed and it does this...
Tutorial startTutorial = new Tutorial();
startTutorial.createTutorialWindow();
}
的setWelcomeStatus
方法是從稱爲Tutorial
其中extends
從Startup
另一個類調用。在那裏,我有一個按鈕,當它按下時它這樣做:
setWelcomeStatus();
我的問題是,我看到這在我的控制檯:
等待歡迎來完成。
點擊按鈕。將返回歡迎過程完成。
布爾「doneWelcoming」是真實的。
布爾「doneWelcoming」返回值如下:假
這意味着doneWelcoming
的價值確實變化,但它不會返回true
原班等我的循環永遠不會停止。我應該改變什麼來解決這個問題?
編輯:在Startup
和類本身中都添加了WelcomeScreen
類的代碼。
注意:很明顯,涉及很多類的實例,所以它變得有點複雜。感謝您的幫助。
嘗試在'doneWelcoming'聲明中的'private boolean'之前添加'volatile'。看起來你有一個併發問題。 – RealSkeptic
東西聞起來很腥。你的第一個代碼位創建一個新的Startup對象,然而你有另一個擴展Startup的類,你改變這個第二類的狀態,然後期望你上面的原始啓動實例改變狀態。這不是Java繼承的工作原理,對我來說,看起來你錯誤地使用了繼承。 @RealSkeptic:想法? –
請發佈一個有效的[SSCCE](http://SSCCE.org)作爲代碼格式的文本,以便我們可以看到自己正在做什麼以及它爲什麼不起作用。 –