2016-12-06 7 views
0

Ich benutze Eclipse RAP, um eine Webanwendung zu realisieren. Der folgende Code wirft einen NullPointerException während der Ausführung der Auswahl listener:Eclipse RAP Dialog :: open() wirft 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

Der Code der Klasse TestDialog sieht wie folgt aus:

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); 
    } 
} 

Wenn ich die MessageBox Klasse anstelle von der Klasse TestDialog funktioniert alles gut.

+0

Ich sehe Sie neu in SO Wenn Sie eine Antwort fühlen das Problem gelöst, markieren Sie es bitte als "Akzeptiert", indem Sie auf das grüne Häkchen klicken. Dies hilft, sich auf ältere Beiträge zu konzentrieren, die immer noch keine Antworten haben. –

Antwort

0

Die RAP 3.1-Implementierung für die Dialog.open-Methode verwendet shell.open(), aber ich kann nicht finden, wo Variable Shell tatsächlich auf einen Wert festgelegt ist? Sollte das nicht "Eltern" sein?

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

Ihre Implementierung von Dialog muss prepareOpen() außer Kraft zu setzen, die nichts standardmäßig der Fall ist.

Nach der Rückkehr von prepareOpen() sollte die Shell, die den Dialog darstellt, erstellt und dem Feld shell zugewiesen werden.

Zum Beispiel:

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

Siehe FontDialog für ein vollständigeres Beispiel: https://github.com/eclipse/rap/blob/master/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/widgets/FontDialog.java

Verwandte Themen