我的主要课程名为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
的{{1}}类extends
,并且此代码在Startup
类中启动方法createTutorialWindow
:
Tutorial
void createTutorialWindow(){
//ActionListener detects when the button is pressed and it does this...
Tutorial startTutorial = new Tutorial();
startTutorial.createTutorialWindow();
}
方法是从另一个名为setWelcomeStatus
的类调用的,Tutorial
来自extends
。我有一个按钮,当按下它时会这样做:
setWelcomeStatus();
我的问题是我在控制台中看到了这个:
等待欢迎结束。
单击按钮。将欢迎回程完成。
布尔" doneWelcoming"是的 布尔" doneWelcoming"值返回为:false
这意味着Startup
的值会更改,但它不会以doneWelcoming
的形式返回到原始类,所以我的循环永远不会停止。我应该改变什么才能解决这个问题?
编辑:在true
和课程本身中添加了WelcomeScreen
课程的代码。
注意:很明显,涉及很多类的实例,所以它有点复杂。谢谢你的帮助。
答案 0 :(得分:-1)
在再次阅读@Hovercraft Full Of Eels的评论后,我认为这个问题在我的遗产中撒谎,他是对的。我从我的两个类extends
和WelcomeScreen
中删除了Tutorial
,然后使用小方法将值从一个类返回到另一个类,同时为每个类使用单个实例,如下所示:
在Startup
我做过:
private WelcomeScreen welcomeScreen = new WelcomeScreen();
public boolean isDoneWelcoming(){
System.out.print("Boolean \"doneWelcoming\" value returned as: "+doneWelcoming+br);
return welcomeScreen.returnToStartup();
}
在WelcomeScreen
我添加了:
private Tutorial startTutorial = new Tutorial();
boolean returnToStartup(){
return startTutorial.returnToWelcome();
}
在Tutorial
我添加了:
buttonClicked=false;
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
buttonClicked = true;
}
});
//and as a separate boolean
boolean returnToWelcome() {
while (!letsgoClicked) {
return false;
}
return true;
}