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 是否为空。如果为空,则创建一个新对话框。然后它打开对话框。

这在 dlg 为空时有效。但是如果 dlg 不为空,我会在 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)

JavaDocLabel告诉您以下内容:

IllegalArgumentException -

ERROR_INVALID_ARGUMENT - 如果图像已被处理

因此,您似乎已经处理了您要设置的图像。


有两种解决方案:

  1. 等待处理图像,直到您的主应用程序关闭。
  2. 在对话框关闭时处理图像,但在重新打开它时创建一个新图像。
于 2012-10-26T06:44:28.507 回答