2016-12-05 5 views
0

進捗モニタにバックグラウンドで実行中の操作があるかどうかを継続的に確認しようとしています。リアルタイムでJob.getJobManager.IsIdle()を使用して進捗モニタを確認しています

このため、Job.getJobManager.IsIdle()を使用しました。

私は次のことを試してみました:

  1. 仕事の中に置きます。
WorkspaceJob job = new WorkspaceJob("Hello") 
    { 
     @Override 
     public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException 
     { 
      while(!Job.getJobManager().isIdle()) 
      { 
       System.out.println(!Job.getJobManager().isIdle()); 
      } 
      return Status.OK_STATUS; 
     } 
    }; 
    job.setPriority(Job.SHORT); 
    job.schedule(); 

しかしJob 'Hello'が実行されているためJob.getJobManager.isIdleはfalseを返すことはありませんので、これは動作しません。

  1. 非同期スレッド内に配置します。

    new Thread(new Runnable() 
        { 
         @Override 
         public void run() 
         { 
          Display.getDefault().asyncExec(new Runnable() 
          { 
           @Override 
           public void run() 
           { 
            while(!Job.getJobManager().isIdle()) 
            { 
             System.out.println("hi"); 
            } 
           } 
          }); 
         } 
        }).start(); 
    

しかし、(既存がある場合)、これが終了する他のプロセスを妨げる主なEclipseのGUIを凍結するよう、これはどちらか動作しません。

誰かが提案や入力方法を教えてくれれば、それは素晴らしいことです!

答えて

1

ジョブ変更リスナーを使用すると、ジョブ状態のすべての変更をリスンすることができます。リスナーの適切な場所でアイドル状態をテストすることはできません。 ではなく、を試してループ呼び出しを行います。isIdle

Job.getJobManager().addJobChangeListener(new JobChangeAdapter() 
    { 
    @Override 
    public void done(IJobChangeEvent event) 
    { 
     if (Job.getJobManager().isIdle() { 
     // Manager is idle 
     } 
    } 
    }); 
:あなただけ、興味のあるイベントを上書きするためにおそらくちょうど doneメソッドを持つように

あなたはIJobChangeListenerメソッドのデフォルト実装を提供しJobChangeAdapterクラスを使用することができます

関連する問題