Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.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 如何通过操作/按钮单击停止线程休眠?_Java - Fatal编程技术网

Java 如何通过操作/按钮单击停止线程休眠?

Java 如何通过操作/按钮单击停止线程休眠?,java,Java,我目前正在尝试构建一个简单的程序,但还没有涉及到动作监听器,目前我正在学习Swing/GUI。我试图在点击按钮时每隔几秒钟显示一次各种图像,有点像幻灯片显示 我的问题是如何真正停止幻灯片放映?我有一个按钮,单击该按钮时,我希望能够停止幻灯片放映,但在显示屏运行时,我无法单击该按钮。我不确定下面的代码是否正确,线程被中断只是为了确保程序不会停止/卡住 startSlide.addActionListener(new ActionListener() { pub

我目前正在尝试构建一个简单的程序,但还没有涉及到动作监听器,目前我正在学习Swing/GUI。我试图在点击按钮时每隔几秒钟显示一次各种图像,有点像幻灯片显示

我的问题是如何真正停止幻灯片放映?我有一个按钮,单击该按钮时,我希望能够停止幻灯片放映,但在显示屏运行时,我无法单击该按钮。我不确定下面的代码是否正确,线程被中断只是为了确保程序不会停止/卡住

   startSlide.addActionListener(new ActionListener()
         {
       public void actionPerformed(ActionEvent actionEvent)
            {
              try{
                       Thread.sleep(5000);
                       Thread.interrupted();

                 } 
                catch (java.lang.InterruptedException ie){
                        System.out.println(ie);
                 }
            }
      });
Thread.sleep()
方法抛出
InterruptedException
并负责中断。这意味着,当你有一个参考你的线程以外的地方,你可以这样做

thread.interrupt();

并在线程本身内正确处理此中断,即停止幻灯片放映或执行任何必要的操作。

不要在事件调度线程的上下文中调用
thread.sleep
。这将导致整个UI停止,并且在返回之前无法进行新的更新

相反,使用
javax.swing.Timer
,它将允许在指定的时间段后设置回调,然后您可以根据需要在该时间段内采取行动


查看并了解更多详细信息…

+1对于
Thread.sleep()
EDT
,我强烈建议您也将其删除。好的,谢谢您的回复。我正在阅读关于实现Swing计时器的文章。正如你所说,整个用户界面冻结,我不知道为什么。