2012-10-25 89 views
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不爲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?

EDIT 在AplotBaseDialog

在AplotDialogHandler

dlg.open(); 
添加一些錯誤消息的

enter image description here

線110

Control contents = super.createContents(parent); 

+0

如果'dlg'不是'null',那麼您的代碼將不會執行任何操作,因爲您檢查了'null'。此外,發佈錯誤。我們不是通靈;) – Baz

+0

我會發布錯誤。用戶可以關閉dailog框,但主應用程序外殼仍然有效。這樣用戶可以關閉我的應用程序對話框,以便他們可以輕鬆使用主應用程序的GUI。當他們準備再次使用我的應用程序時,他們再次單擊該菜單,並打開對話框,其中包含他們之前在會話中添加的數據 – jkteater

回答

1

java.lang.IllegalArgumentException異常:參數無效

...

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

Label JavaDoc的告訴你以下幾點:

拋出:IllegalArgumentException -

ERROR_INVALID_ARGUMENT - 如果圖像已經被佈置

所以,好像你已經設置您要設置圖像。


這有兩種解決方案:

  1. 等待與您之前的主要應用程序被關閉處置的圖像。
  2. 在對話框關閉時處理圖像,但在重新打開時創建一個新圖像。
相關問題