我正在开发一个java应用程序,启动一些线程来完成一些工作,并用JProgressBar
更新JTable
。 我就下发展的JTable
一个JPopupMenu
,有一些JMenuItem
:如何停止,暂停,取消java中的线程
- 暂停
- 停止
- 取消
- 恢复
所以我希望能够做到这一点。
当用户添加新的线程在JTable
我保存在ArrayList<Thread>
线程,所以我要实现
stop.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
}
});
和其他..
,所以我尝试,与我有假说当前线程的索引:
Thread t = working.get(selectedThread); //where working is my `ArrayList<Thread>`
t.interrupt();
但没有..它继续工作...... ,所以我尝试:
try {
working.get(actualRow).wait();
} catch (InterruptedException ex) {
Logger.getLogger(PannelloRicerca.class.getName()).log(Level.SEVERE, null, ex);
}
但它让我IllegalStateMonitorException
wait()
,所以我不知道该怎么办..有人可以帮助我吗?
您需要锁定working.get(actualRow)对象才能调用wait。这就是你得到IllegalStateMonitorException的原因。可以从同步块或同步方法调用等待。而不是在线程上使用中断调用,通过设置线程的某个变量向线程发送通知。并且在线程中使用这个值来停止执行 – Delta 2012-03-23 02:56:01