Java while循环细微

时间:2014-03-31 22:46:21

标签: java loops while-loop

我有以下代码:

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;
    }

}

可以在http://dept.cs.williams.edu/~cs134/squintV2.20.jar

找到斜视

1 个答案:

答案 0 :(得分:2)

如果loggeIngetDone返回的变量被另一个线程设置为true并且未声明volatile,则可能会发生这种情况。

如果您提供更多代码,可能更容易确定您的问题。