【问题标题】:Infinite loop not seeing updated variable [duplicate]无限循环看不到更新的变量[重复]
【发布时间】:2013-02-20 04:35:14
【问题描述】:

我有一个无限循环,它等待更新布尔值的方法,虽然这在学校似乎一切正常,但在家里却行不通。不确定这是否真的意味着它是基于计算机的还是什么,因为它也适用于那里的 print 语句。

while(running){
    //System.out.println(running);      
}

...

public static void passwordCheck(String pass){
    if(pass.equals(password)){
        correctPW = true;
    }
    else if(pass.equals(overKey))
        PWCoder.override(password);
    running = false;
}

...

public void actionPerformed(ActionEvent e){
    String temp = new String("");
    for(int x=0;x<passwordInput.getPassword().length;x++)
        temp+=passwordInput.getPassword()[x];
    PWCoder.passwordCheck(temp);
}

正如我所说,这段代码适用于未注释的 print 语句,但这相当难看。我要在这里输入一个密码屏幕,如果您输入错误,则会打开一个不同的窗口(代码未显示),或者您可以输入调用覆盖方法的覆盖密码。我使用了许多调试语句,在方法中运行设置为 false,我猜 while 循环只是没有选择它。抱歉,代码有点乱。有问题的while循环,应该让循环结束的方法,以及调用该方法的另一个类中的方法。

【问题讨论】:

  • 按照我的看法,您暂时不会更改 runinng 的值...所以它无法停止
  • 如果您在紧密循环中检查非易失性变量,您可能永远看不到其他线程执行的任何更改。即使变量是易变的,出于性能原因,这也是一个坏主意
  • 我的困惑来了,因为这在我学校的计算机上运行良好,但我的家用计算机运行它时出现问题。我确实意识到它可能太快了,但我想不出我可以在循环中放什么来减慢它,但又不会把其他东西弄得一团糟。
  • 您是在使用线程还是在等待更改变量。 Anzwaz 的代码没有意义。你应该使用事件而不是 while 来做这样的事情
  • 我们最近在学校开始用 swing 和 awt 做 GUI,所以我决定将它应用到我的一个项目中。我有另一个类在创建对象时显示菜单,然后 main 方法进入 while 循环。当密码输入到 PasswordField 并按下提交 JButton 时,显示的事件代码将触发。无论密码是否正确,变量 running 都应设置为 false 并应用下一个操作。

标签: java loops infinite


【解决方案1】:

一些问题,这应该可以工作

 public static void passwordCheck(String pass){
        if(pass.equals(password)){
            correctPW = true;
            running = true;
        }
        else if(pass.equals(overKey)) {
            PWCoder.override(password);
        running = false;
    }
    }

另外,您可以考虑只使用 break,以便在成功时退出循环。

【讨论】:

  • 这和他做的一样。如果你看起来更好,你会发现running = false;这个句子不在else if
  • @iberbeu,这正是我修复的。
  • 在此代码中else if(pass.equals(overKey)) PWCoder.override(password); running = false; 最后一句不在else if 中,所以它总是被调用。不管是通过if还是通过else
  • @iberbeu 我觉得我在重复自己,你没有看我发布的内容。
  • 我需要它在循环之外。如果密码正确,我仍然需要运行为 false 才能进入下一步。我也尝试过休息,使用 while(running){ if(running==false) break; } 但它可能仍然太快了循环来捕捉变化
猜你喜欢
  • 1970-01-01
  • 2016-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多