java - if 语句仅在我之前打印到终端时执行

标签 java swing if-statement while-loop jbutton

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

算法结构如下:

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

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

提前致谢!

最佳答案

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。

关于java - if 语句仅在我之前打印到终端时执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15886619/

相关文章:

java - 水平滚动条不适用于 Java Swing 中的 JTable

c - 使用 C 编程语言对 XM1000 传感器设备进行编程 需要 if 语句

java - 使用 nextFloat() 时线程 "main"java.util.InputMismatchException 中出现异常

java - DefaultTreeCellRenderer 未按预期工作

java - Google Sheet API 多范围解析

java - 如何在线程中向 JTextArea 追加新数据?

c - 以下两种情况在性能上有什么区别吗?

javascript - 提高 else-if 链的性能

java - 如何计算 Blade 批量尺寸

java - 如何使 JDialog 永远不会位于顶部(在一个应用程序内,而不是在系统范围内)