Java Thread.sleep不使用gui
我试图让程序等待用户点击GUI。 但是Thread.sleep只会休眠整个GUI。所以我只能看到一扇空窗户 代码:Java Thread.sleep不使用gui,java,multithreading,swing,user-interface,Java,Multithreading,Swing,User Interface,我试图让程序等待用户点击GUI。 但是Thread.sleep只会休眠整个GUI。所以我只能看到一扇空窗户 代码: Swing事件需要在事件分派线程上发生 你试过了吗 SwingUtilities.invokeAndWait(() -> Thread.sleep(20)) 我以前有过这样的问题。所以你并不孤单。我犯过这样的错误 你的问题 解决方案 *详细答复* '您所做的是在while循环中创建了一个线程。基本上,整个GUI暂停了10毫秒,事实上整个程序都暂停了。此外,我不明白你的目标是
Swing事件需要在事件分派线程上发生 你试过了吗
SwingUtilities.invokeAndWait(() -> Thread.sleep(20))
我以前有过这样的问题。所以你并不孤单。我犯过这样的错误
你的问题
解决方案
*详细答复*
'您所做的是在while循环中创建了一个线程。基本上,整个GUI暂停了10毫秒,事实上整个程序都暂停了。此外,我不明白你的目标是什么。您说过要等待用户单击GUI。建议是,倾听按钮的单击。例如Button.setOnAction->{};那样他就不用睡觉了。我只是说,如果你正在制作一些东西的动画,你会想暂停或者睡觉 您最好使用。您不能在gui中使用thread.sleep,您需要使用其他方法从单击事件句柄继续您的逻辑UI应用程序的可能副本始终是UI驱动的。它总是坐在那里等待事件发生。所以单凭你的问题标题是没有意义的。可能你正在进行某种活动;你想放慢速度;或暂缓执行;然后你真的从@MadProgrammer给你的链接开始。或者他给你的第二个链接。不,它不是复制品,在这里没有帮助-你应该解释你想要实现什么;弄清楚为什么另一个问题对你没有帮助。到现在为止,你已经得到了好几个好建议。退后一步,消化它!执行此操作时,EDT将引发异常。如果您尝试从后台线程执行此操作,您仍然会在EDT上调用thread.sleep,这无法解决问题我甚至不知道这意味着什么。我尝试了该代码。它成功了,它展示了一切。但是,每当我点击它时,它不会更新。不要调用Thread.sleep或任何在EDT中阻塞的方法!这将导致整个GUI变得无响应,这可能不是OP想要的。正如其他人所建议的,使用计时器。@ostrichofevil根据OP提供的信息,或者缺少计时器可能不是合适的解决方案,ActionListener可能是更好的解决方案-尽管同意其他所有内容
SwingUtilities.invokeAndWait(() -> Thread.sleep(20))
while (!enteredField) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Thread thread = new Thread(() -> {
while (!enteredField) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
thread.start();