#java #swing #swingworker #event-dispatch-thread
#java #качать #swingworker #событие-отправка-поток
Вопрос:
Я хочу запустить определенную функцию из doInBackground на EDT. В настоящее время она настроена с помощью publish и process, которая работает просто отлично. Однако я хочу знать, есть ли способ запустить функцию на EDT из doInBackground без использования публикации и обработки. Кроме того, без использования invokeLater. Могу ли я как-то это сделать?
Ответ №1:
Вы бы сделали это так, как если бы ставили в очередь любой код на EDT: через Runnable, который добавляется в очередь событий:
protected void doInBackground() throws Exception {
// code to be called off of the EDT
SwingUtilities.invokeLater(new Runnable() {
public void run() {
// code to be called on the EDT
}
});
return null;
}
Комментарии:
1. Извините, не следовало указывать invokeLater или публиковать и обрабатывать.
2. @Graham: что значит «нет invokeLater», поскольку это не имеет смысла. Почему вы не могли использовать invokeLater, поскольку это решение, и другого нет?
3. это именно то, что я хотел знать. Если есть другое решение, отличное от invokeLater или публикации и обработки. Если нет, то на мой вопрос дан ответ.