У меня есть качающееся приложение. После нажатия элемента меню в строке меню я пытаюсь выполнить вызов API, который предположительно займет некоторое время.
Я не хотел, чтобы приложение Swing застревало/зависало до тех пор, пока вызов API не даст свой результат, поэтому я использовал SwingUtilities.invokeLater, чтобы отделить вновь созданный поток, который позаботится о вызове API. Ниже приведен код для вышеуказанного
public void actionPerformed(ActionEvent e){
Object src=e.getSource();
if(src.equals(theJMenuItemClicked)){
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
//apicall here
}
})
}
Пока поток вызовов API работает, я показываю JDIalog с сообщением о том, что «вызов API выполняется», и кнопкой «Прервать поток».
Я хотел бы убить поток, нажав кнопку «ABort Thread» в Jdialog.
Если это обычный поток, у нас есть Thread t = new Thread(new Runnable())
, и мы вызываем t.stop
для него же.
Как мне получить этот конкретный экземпляр потока, порожденный SwingUtilities, чтобы я мог остановить его? Проще говоря, как я могу убить созданный выше поток?