我正在开发一个 java 项目,其中外部微 Controller 设备通过串行端口连接到计算机。我在 java 应用程序中有一个等待对话框,等待命令在微 Controller 设备上执行。如果微 Controller 在 10 秒内没有响应,应用程序将关闭。
问题是有些命令太快了,微 Controller 在等待对话框激活之前就响应了。这会导致应用程序在十秒后关闭。
这是我想到等待对话框可见的第一个想法:
new Thread() {
public void run() {
while (!Main.mainFrame.waitDialog.isVisible()) {}
Main.usbManager.start();
}
}.start();
但应用程序卡在 while 循环中并且等待对话框是可见的,但是如果我在 while 循环中添加一些随机语句,例如 System.out.flush();
,它有效,当对话框可见时,程序从 while 循环中退出。
如何等待对话框可见?
谢谢
最佳答案
大多数 GUI 库都是单线程的。这意味着对它的调用可能不是线程安全的,你永远不能保证看到变化。特别是 boolean
值可以内联,因此您可以确定在某个点之后您不会看到值发生变化。
如果你使用的东西会减慢循环,它不会优化代码一段时间(这是不可靠的)或者像 System.out.flush()
那样有内存障碍,那么这个优化就不会发生。
更好的轮询方法可能是使用 Thread.yield()
或 Thread.sleep(40)
来为自己节省一些 CPU。
关于java - while 循环未执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38037965/