赞
踩
i'm developing an app in java that launches some threads that do some jobs and update a JTable with a JProgressBar.
I develope a JPopupMenu on the JTable that has some JMenuItem:
Pause
Stop
Cancel
Resume
So i want to be able to do it.
When user add new thread in JTable i save the thread in a ArrayList, so i have to implement
stop.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
}
});
and the other..
so i try , with the hypothesis that i have the index of current thread:
Thread t = working.get(selectedThread); //where working is my `ArrayList`
t.interrupt();
but nothing.. it continue working...
so i try:
try {
working.get(actualRow).wait();
} catch (InterruptedException ex) {
Logger.getLogger(PannelloRicerca.class.getName()).log(Level.SEVERE, null, ex);
}
but it get me IllegalStateMonitorException on wait(), so i don't know how to do.. can someone help me?
解决方案
The IllegalStateMonitorException is because a thread can only wait in an object it it 'owns' (I don't remember if it is the right term) it.
You need to synchronize by the same object first, in order to ensure that nobody else is already waiting on this object.
synchronize (working.get(actualRow)) {
working.get(actualRow).wait();
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。