我问了一个关于我的实际问题的问题,但没有出现解决方案,所以我会尝试更开放,如何让java等待某个输入?现在我有一个半无限的while循环,它查看一个变量,直到ActionEvent在另一个类中触发时才会更新。但是我读过关于线程和其他一些东西的内容,如果有人能详细说明这个话题,我很好奇吗?基本上我正在使用GUI,我的窗口会弹出并要求输入密码,当按下按钮时,会更改变量以退出循环。最奇怪的是它可以在学校的计算机上运行,但不适用于我自己的计算机。我甚至重新安装了我的JDK,但事实并非如此。它出现了它可能是一个速度问题,但是使用print语句我看到变量得到了更新,而我只是停下来看它。
private static boolean running=true;
while(running){
}
...
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);
}
...
public static void passwordCheck(String pass){
if(pass.equals(password)){
correctPW = true;
}
else if(pass.equals(overKey))
PWCoder.override(password);
doneRunning();
}
...
public static void doneRunning(){
running = false;
}
有代码可以提供帮助。应该按它执行的顺序或多或少,但它不是所有的一个块,是多个类和所有。我尝试使用volatile,它没有做任何事情。
答案 0 :(得分:1)
如果您在多个线程中更新并读取变量(可能是原始值),您是否使用 volatile 关键字声明了该变量。为了优化,你的线程可能已缓存了值而没有读取更改的值--- volatile强制JVM每次都读取变量而不缓存它。
除了声明变量volatile之外,您可以考虑使用同步块来读取/写入变量(如果不是原始字段,并且需要的不仅仅是原子操作来读取/写入值。) / p>
在更新的代码示例中,运行和密码变量应声明为 volatile ,如下所示:
private static volatile boolean running = true;