второстепенные задания свингеров становятся последовательными - PullRequest
4 голосов
/ 06 сентября 2010

Я использую SwingWorkers, чтобы сделать мой GUI отзывчивым.Но я не могу понять следующее: у меня есть удаленный метод, который я хочу вызвать из GUI, когда пользователь нажимает кнопку.У меня есть внутреннее действие кнопки (сокращение от представления проблемы):

//in action of button
SwingWorker worker = new SwingWorker<boolean,Void>(){
   @Override
   public boolean doInBackground(){
      return call_remote_method_here();
   }

};
worker.execute();
//some other code

Моя проблема в том, что, хотя графический интерфейс кажется отзывчивым, реальные вызовы удаленного метода являются последовательными и не параллельными.Я заметил это в сетевых следах и подумал, что метод блокирует.Но потом я увидел в следах, что SwingWorkers, кажется, работают последовательно.От

log 2010-09-06 16: 58: 22,962 [ SwingWorker-pool-4-thread-1 ] DEBUG -> Первый удаленный вызов метода

Я получаю ответ, а затемработает второй работник Swing

2010-09-06 16: 58: 23,227 [ SwingWorker-pool-4-thread-1 ] DEBUG -> Второй удаленный вызов метода

Почему это происходит?Я думал, что это случайное чередование, но я заметил, что 2 экземпляра имеют одинаковое имя?Рабочие качели объединены?Это случайное поведение?Разве я не вижу 2 одновременных звонка?Если они используются повторно, могу ли я что-то сделать для одновременных вызовов, а не для парализма?

Спасибо

Ответы [ 2 ]

7 голосов
/ 06 сентября 2010

Проблема в том, что все работники Swingwork работают в одном фоновом потоке.Если вы хотите, чтобы они выполнялись одновременно, вы можете добавить их в службу исполнителя, например, так:

Executor executor = Executors.newCachedThreadPool();
executor.execute(yourSwingWorker);

Источник: Форумы Oracle

4 голосов
/ 06 сентября 2010

Вы можете, возможно, взглянуть на эту запись .

Одним из возможных решений является выполнение экземпляров SwingWorker с использованием вашей собственной службы-исполнителя.Кажется, что изменение в jdk 1.6 update 18 изменило поведение по умолчанию.

...