2017-10-26 9 views
0

私はヘッドレスモードでアプリケーションを実行していますが、何らかの実行のために何らかの指定時間の間にダイアログを表示する必要があります。Displayless.getDefault.syncExec()がヘッドレスモードで正しく動作していない

Display.getDefault().syncExec(new Runnable() { 
@Override 
    public void run() { 
     //Jface Dialog code 
     RuntimePauseDialog dlg = new RuntimePauseDialog(); 
     dialogResult = dlg.open(); 
    } 
}); 

コードサンプルは、上記のコードは複数回呼び出さとダイアログが表示されます初めてのことだろう。 2回目以降、ダイアログは表示されません。さらに、run()はまったく実行されず、フリーズします。 syncExec()内には、初期化され、永遠に待機するwait()を呼び出すRunnableロックがあります。 これはThreadsと関係があります。

注: UIモードから実行すると、同じコードでダイアログが複数回表示されます。この問題は、ヘッドレスモードでのみ発生します。

Stackoverflowからこの提案を試しましたが、私はヘッドレスモードで動作しているので、Workbenchは作成されず使用できません。

答えて

2

syncExec(およびasyncExec)は、メインのDisplay.readAndDispatchループがUIスレッドで実行されていることが必要です。ヘッドレスモードでは、これは当てはまりませんので、これはまったく動作しません。

+0

お返事ありがとう@ greg-449、それはまだそれが初めてではなく、2回目ではないことを知りたいですか? – Sudeep

+0

それは多くのデバッグが必要です。私が使用しているmacOSでは、このコードはまったく動かず、 'Cocoaの制限のためにメインスレッドで表示する必要があります'というエラーが表示されます。 –

+0

Display.getDefault()Java docが _ "デフォルトのディスプレイを返します。それ以外の場合は、このメソッドを呼び出すスレッドがまだ存在していない場合はそのユーザインタフェーススレッドを作成します" _ ヘッドレスモード? – Sudeep

関連する問題