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