在我的java gui程序中,我有一个按钮,点击后会创建一个在后台播放歌曲的新线程。如果我没有创建一个新线程,并且只是在actionListener中播放它,那么这首歌会冻结其余的gui,直到它完成为止。
但是,我希望用户能够停止播放歌曲..在代码中我将采取的意思是“终止线程”。我已尝试过一些在线答案,例如弃用的.stop()。interrupt()方法,但它们似乎无法正常工作。我认为这与播放歌曲的线程在歌曲的持续时间内在Thread.sleep()中的事实有关。任何终止睡眠线程的方法? -Thanks
答案 0 :(得分:1)
您可以让您的线程等待超时通知对象,而不是休眠。然后,如果您希望线程唤醒或中断它,您将通知该对象。
答案 1 :(得分:1)
您可以使用中断方法。它会给睡眠方法中断信号。你将抓住InterruptedException
,它将从方法返回。
答案 2 :(得分:1)
您必须使用wait()和notify()函数。
wait()告诉调用线程放弃监视器并进入休眠状态,直到某个其他线程进入同一个监视器并调用notify()。
notify()唤醒在同一个对象上调用wait()的第一个线程。
因此,您可以保留另一个按钮,例如“恢复按钮”,触发事件通知()。