我正在使用javax.swing包来构造一个gui,并使用if语句在内部运行一个while循环,以查看是否按下了一个按钮。由于某些原因我不知道,这段代码只有在我在while循环中打印到控制台时才有效。
以下是算法结构:
while(true){
System.out.println(" ");
if (startOver && playPressed) {//set to true on JButton press
//do stuff
}
}
这可能是某种线程问题?以前有没有人遇到过这样的问题?有没有一种等待JButton被按下的方法,它不涉及无限的while循环?
提前致谢!
答案 0 :(得分: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 tutorial。
swing事件派发线程中的任何无限循环都将永久冻结GUI。
答案 1 :(得分:0)
我能够在没有无限循环的情况下克服这个问题的唯一方法是为算法的“// do stuff”部分创建一个新线程。
非常奇怪,我仍然不明白为什么我必须打印到控制台以使其在while循环中工作。