父类中的值未更改

时间:2017-04-09 15:17:05

标签: java class while-loop boolean

我的主要课程名为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课程的代码。
注意:很明显,涉及很多类的实例,所以它有点复杂。谢谢你的帮助。

1 个答案:

答案 0 :(得分:-1)

在再次阅读@Hovercraft Full Of Eels的评论后,我认为这个问题在我的遗产中撒谎,他是对的。我从我的两个类extendsWelcomeScreen中删除了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;
}