为什么我的while循环中的if语句只在​​调试中执行?

时间:2015-11-03 18:20:01

标签: java user-interface debugging intellij-idea

所以我正在制作一个井字游戏,我正在使用IntelliJ中的JButton制作的GUI。这是我当前的代码,用于检测按下按钮的时间并使用XO进行标记。

public static void taketurn(){
    Boolean gamerunning = true;
    while(gamerunning){
        if(button1.getModel().isPressed()) {
            button1.setText("X");
            gamerunning = false;
        }
    }
}

我的问题是,在运行代码时,它创建的UI都很好,但点击按钮无效。但是,当我进入调试但在button1.setText("X")处休息然后从那里前进时,它会正确执行代码并显示X。为什么这只适用于使用中断进行调试而不是正常运行?

2 个答案:

答案 0 :(得分:3)

可能发生的事情是在全速运行时,如果在while循环重新开始之前没有执行if。您是否考虑过在按钮上使用actionListener? 在创建按钮时尝试这样的事情

button1.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            //logic here to add X or O
        }
}});

然后,您不必担心在循环中运行以等待用户选择。只要他们按下按钮,您的逻辑就会处理添加X或O

答案 1 :(得分:1)

我认为在这里使用ActionListener类是一个好主意。 您可以创建自己的ActionListener实现,而无需使用匿名类,如下所示:

class MyActionListener implements ActionListener {

    @Override
    public void actionPerformed(ActionEvent e) {
        //The stuff you want to do when the button is pressed
    }

}

然后,您可以在需要时创建此类的新实例,并使用addActionListener(ActionListener l)函数将其添加到JButton中。

MyJButton.addActionListener(new MyActionListener());