1

我正在使用 javax.swing 包来构建一个 gui,并让一个 while 循环在里面永远运行一个 if 语句,以查看是否按下了按钮。出于某种我不知道的原因,此代码仅在我在 while 循环内打印到控制台时才有效。

下面是算法结构:

while(true){
   System.out.println(" ");
   if (startOver && playPressed) {//set to true on JButton press
    //do stuff
   }
}

可能这是某种线程问题?有没有人遇到过这样的问题?是否有一种等待按下 JButton 的方法不涉及无限的 while 循环?

提前致谢!

4

2 回答 2

2

Swing 是基于事件的。您不应该有无限循环等待按下按钮。该循环由 Swing 内部实现。您应该做的是向事件添加一个动作侦听器,单击该按钮时将调用该事件侦听器:

button.addActionListener(new ActionListener() {
    @Override 
    public void actionPerformed(ActionEvent e) {
        System.out.println("The button has been clicked!");
        // do stuff
    }
}

这是处理 Swing 时的基本内容。你应该阅读挥杆教程

swing 事件调度线程中的任何无限循环都将永远冻结 GUI。

于 2013-04-08T18:53:13.110 回答
0

我能够在没有无限循环的情况下克服这个问题的唯一方法是为算法的“//do stuff”部分创建一个新线程。

很奇怪,我仍然不明白为什么我必须打印到控制台才能使其在 while 循环中工作。

于 2013-04-10T00:58:26.060 回答