Запуск функции на EDT из doInBackground

#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 или публикации и обработки. Если нет, то на мой вопрос дан ответ.