Я разрабатываю приложение в java, которое запускает некоторые потоки, которые выполняют некоторые задания, и обновляет JTable
с помощью JProgressBar
. я JPopupMenu
развивать на JTable
, который имеет некоторые JMenuItem
:Как остановить, приостановить, отменить поток в java
- Пауза
- Stop
- Отменить
- RESUME
Так я хочу, чтобы быть в состоянии сделать это.
Когда пользователь добавить новый поток в 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()
, поэтому я не знаю, как это сделать .. может кто-то мне помочь?
Чтобы вызвать ожидание, вам нужно иметь объект work.get (actualRow).Именно по этой причине вы получаете исключение IllegalStateMonitorException. wait может вызываться из синхронизированного блока или синхронного метода. Вместо того, чтобы использовать вызов прерывания в потоке, отправьте уведомление потоку, установив некоторую переменную потока. И в потоке использовать это значение, чтобы остановить выполнение – Delta