1

私のアプリケーションには 2 つの jtextpanes があり、いくつかのタスクを含む executorservice instacne があります。jtextpanes の FocusListener focusGained メソッドを実行する前に、executorservice インスタンスのすべてのタスクが完了していることを確認したいと思います。また、focusLost メソッドが呼び出されたときに、executorservice にさらにタスクを追加します。

コード

top.addFocusListener(new FocusListener()
{

  public void focusLost(FocusEvent e)
  {

    if (ecaViewControl.isInitialized())
    {
      stopRecording();
      executor.execute(new Runnable()
      {

        public void run()
        {
          ecaViewControl.save(top);

        }
      });

      executor.execute(new Runnable()
      {
        public void run()
        {
          ecaViewControl.closeDocument();

        }
      });

   }

  }

   public void focusGained(FocusEvent e)
   {
   //Need to have completed all the task in executor service before EDT executes the code in here

   });

}
4

1 に答える 1

1

終了するタスクの数がわかっている場合は、CountDownLatchの使用を検討してください

コードは次のようになります。

public void run() {
    try {
    // do something here
    } finally {
       latch.countDown()
    }
}

次に、タスクが完了するのを待っているコードで、単にラッチを待ちます。

latch.await();

または、エグゼキュータなしで生活する可能性がある場合は、代わりにCompletionServiceを使用してください。

于 2012-09-17T13:46:19.780 に答える