我有以下代码:
while(!loggedIn) {
loggedIn = login.getDone();
}
System.out.println("madeIt");
打印行永远不会执行,即使我知道login.getDone()在某些时候返回true。但是,如果我使用以下代码:
while(!loggedIn) {
loggedIn = login.getDone();
System.out.println(loggedIn);
}
System.out.println("madeIt");
然后执行最后一个打印行。我不知道为什么。有没有人知道为什么会这样?
有关更多代码,请参阅我的主要课程:
public class GameManager {
public static void main (String args[]) {
boolean loggedIn = false;
String username;
int playerNum;
int i = 0;
Login login = new Login();
while (!loggedIn){
loggedIn = login.getDone();
//System.out.println(loggedIn);
}
login.close();
System.out.println("Logged in");
}
}
以及整个登录类:
import squint.*;
import javax.swing.*;
import java.util.*;
public class Login extends GUIManager {
private final int WINDOW_WIDTH = 200, WINDOW_HEIGHT = 150;
private JButton login;
String name;
boolean done;
int playerNumber;
public Login() {
done = false;
this.createWindow( WINDOW_WIDTH, WINDOW_HEIGHT );
this.setTitle("Hearts Login");
login = new JButton("Click");
contentPane.add(login);
}
public void buttonClicked( ) {
done = true;
System.out.println(done);
}
public boolean getDone() {
return done;
}
}
找到斜视
答案 0 :(得分:2)
如果loggeIn
或getDone
返回的变量被另一个线程设置为true
并且未声明volatile
,则可能会发生这种情况。
如果您提供更多代码,可能更容易确定您的问题。