2010-08-04 3 views
1

Мне нужно запустить два SwingWorker s. Один из них может работать только после того, как другой будет выполнен. Могу ли я запускать их так?Могу ли я запустить один SwingWorker в другом?

class TestWorker { 
    private FirstWorker worker1; 
    private SecondWorker worker2; 

    public TestWorker() { 
     worker1 = new FirstWorker() { 
      @Override 
      protected void done() { 
       try { 
        result1 = get(); 
       } catch (Exception) { 
        // exception handling 
       } 

       worker2 = new SecondWorker() { 
        @Override 
        protected void done() { 
         try { 
          result2 = get(); 
         } catch (Exception) { 
          // exception handling 
         } 
        } 
       } 

       worker2.execute(); 
      } 
     } 

     worker1.execute(); 
    } 
} 

И как мне отменить их? Как это?

private cancel() { 
    if (worker2 != null) work2.cancel(); 
    if (worker1 != null) work1.cancel(); 
} 

Большое спасибо!

ответ

1

Вы можете сделать это таким образом, и он будет работать. Однако, если в вашем внешнем done не выполняются другие операции, которые вы не показываете, вам, вероятно, было бы лучше с чем-то, что делало обе операции в doInBackground и возвращало массив результатов.

Смежные вопросы