Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Thread.sleep不使用gui_Java_Multithreading_Swing_User Interface - Fatal编程技术网

Java 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毫秒,事实上整个程序都暂停了。此外,我不明白你的目标是

我试图让程序等待用户点击GUI。 但是Thread.sleep只会休眠整个GUI。所以我只能看到一扇空窗户

代码:


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();