2016-12-06 91 views
0

我使用Eclipse RAP來實現Web應用程序。下面的代碼選擇listener的執行過程中拋出一個NullPointerExceptionEclipse RAP Dialog :: open()拋出NullPointerException

Link link = new Link(composite_2, SWT.NONE); 
link.setBackground(SWTResourceManager.getColor(SWT.COLOR_WHITE)); 
link.setText("<a>Dokument erfassen</a>"); 
link.addSelectionListener(new SelectionAdapter() { 
    @Override 
    public void widgetSelected(SelectionEvent arg0) { 

     TestDialog dia = new TestDialog(getShell(), 
        SWT.APPLICATION_MODAL); 
     dia.open(new DialogCallback() { 
      public void dialogClosed(int returnCode) { 
       System.out.println("Stored file: "); 
      } 
     }); 
    } 
}) 

enter image description here

類TestDialog貌似的代碼如下:

public class TestDialog extends Dialog { 
    private static final long serialVersionUID = 1L; 

    public TestDialog(Shell parent) { 
     super(parent); 
    } 

    public TestDialog(Shell parent, int style) { 
     super(parent,style); 
    } 
} 

如果我使用MessageBox類代替一流的TestDialog,一切工作正常。

+0

我看你是新來的SO 如果你覺得一個答案的問題解決了,請把它標記爲點擊綠色的勾號即可「接受」。這有助於將重點放在仍然沒有答案的舊帖子上。 –

回答

0

Dialog.open方法的RAP 3.1實現使用shell.open(),但我找不到變量shell實際設置爲值的位置?這不應該是「父母」嗎?

public void open(final DialogCallback dialogCallback) { 
    prepareOpen(); 
    returnCode = SWT.CANCEL; 
    shell.open(); 
    shell.addShellListener(new ShellAdapter() { 
     @Override 
     public void shellClosed(ShellEvent event) { 
     if(dialogCallback != null) { 
      dialogCallback.dialogClosed(returnCode); 
     } 
     } 
    }); 
    } 
0

你實現Dialog需要重寫prepareOpen()在默認情況下不執行任何操作。

prepareOpen()返回後,代表該對話框的Shell應創建並分配到shell字段。

例如:

shell = new Shell(parent, SWT.TITLE | SWT.BORDER | SWT.APPLICATION_MODAL); 
shell.setText(getText()); 
// create controls in shell 

一個更完整的示例,請參閱FontDialoghttps://github.com/eclipse/rap/blob/master/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/widgets/FontDialog.java

相關問題