我正在開發一個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