1

GUI のない操作クラスがあります。クラスは基本的にデータ管理を行います。クラスはメイン GUI のメソッドから呼び出されます。私が抱えている問題は、何かが失敗した場合にユーザーにメッセージを表示することです。を使用しMessageDialogていますが、実行時に失敗し続けます。問題はシェルにあると思います。nullシェルとして使おうとすると。

MessageDialog.openError(null, "Printer Error Message", "Error getting print reply file.");

エラーはヌルポインタ例外です

MessageDialog.openError(Display.getCurrent().getActiveShell() etc

エラーはヌルポインタ例外です

MessageDialog.openError(Display.getDefault().getActiveShell()

エラーは無効なスレッド アクセスです

  1. これは GUI クラスではないので、GUI 親からシェルを渡す必要がありますか?
  2. クラスでシェルを作成して、それを使用することはできますか?
4

3 に答える 3

5

またはでERROR_THREAD_INVALID_ACCESSエラーを修正できます。試してみてください:Display.syncExecDisplay.asyncExec

Display.syncExec(new Runnable() {
    void run() {
        MessageDialog.openError(Display.getDefault().getActiveShell()...
    }
}
于 2012-09-21T18:22:55.437 に答える
3

これはあなたが望むことをします:

MessageDialog.openError(new Shell(), "Printer Error Message", "Error getting print reply file.");

新しいShellを作成して に渡すだけMessageDialogです。

于 2012-09-21T18:20:14.637 に答える
2

考慮すべきいくつかの重要なポイント。

  1. まず、データ管理クラス (モデル) と UI を混在させないでください。
  2. エラー/情報メッセージを表示するためのユーティリティ クラスとメソッドを用意します。
  3. 常に UI スレッドで UI ウィジェットにアクセスします。Display.getDefault().asyncExec()または_syncExce()
  4. Display.getDefault().getActiveShell()最初にダイアログに渡す場合にチェックし、null の場合は作成して渡します。
于 2012-09-21T19:28:14.347 に答える