0

これははるかに簡単な質問です。

private static AplotBaseDialog dlg; 


public Object execute(final ExecutionEvent event) throws ExecutionException {
  if (dlg == null){
     try {
          Shell shell = HandlerUtil.getActiveWorkbenchWindowChecked(event).getShell();
          dlg = new AplotBaseDialog(shell, session);  
     }
     catch {
     }
     dlg.open();
     return null;
 }

上記のコードをチェックして、dlgがnullかどうかを確認します。nullの場合は、新しいダイアログを作成します。次に、ダイアログを開きます。

これは、dlgがnullの場合に機能します。しかし、dlgがnullでない場合、dlg.open()行でエラーが発生します。エラーは、ダイアログクラスのこのコードを指しています

  @Override
  protected Control createContents(Composite parent) {
     Control contents = super.createContents(parent); <==== Right Here
     setTitle("Title");
     setMessage("Message");
     if (image != null) {
        setTitleImage(image);
     }
     return contents;
  }

だから私の質問は、dlg!= nullのときにダイアログを開くにはどうすればよいですか?

編集 エラーメッセージの一部を追加する

ここに画像の説明を入力してください

AplotBaseDialogの110行目

Control contents = super.createContents(parent);

AplotDialogHandlerの48行目

dlg.open();
4

1 に答える 1

1

java.lang.IllegalArgumentException: 引数が無効です

...

org.eclipse.swt.widgets.Label.setImage(Label.java:337)で

JavaDoc ofLabelは次のことを示しています。

IllegalArgumentException -

ERROR_INVALID_ARGUMENT - 画像が破棄された場合

したがって、設定しようとしている画像は既に破棄されているようです。


これには 2 つの解決策があります。

  1. メイン アプリケーションが閉じられるまで、イメージの破棄を待ちます。
  2. ダイアログを閉じたときに画像を破棄しますが、再度開いたときに新しい画像を作成します。
于 2012-10-26T06:44:28.507 に答える