2011-01-06 3 views
1

Da es SWTException ist, habe ich die syncExec-Methode verwendet, aber ich konnte das SWTException-Problem nicht aus meinem Code wiederherstellen. Bitte vorschlagen.Problem bezüglich SWTException: Ungültige Thread-Exception | synExec-Verwendung wird fehlgeschlagen

public class SampleSwtAction implements IWorkbenchWindowActionDelegate { 
    private IWorkbenchWindow window; 

    public SampleSwtAction() { 
    } 


    public void run(IAction action) { 

    MessageDialog.openInformation(
      window.getShell(), 
      "SampleSwt", 
      "Hello,Run swt application"); 


     window.getShell().getDisplay().syncExec(
        new Runnable() { 
        public void run(){ 
         Display firstDisplay = new Display(); 

         Shell firstShell = new Shell(firstDisplay); 
         firstShell.setText("Sample SWT application"); 
         firstShell.setSize(200,100); 
         firstShell.open(); 
          while (!firstShell.isDisposed()) { 
          if (!firstDisplay.readAndDispatch()) 
           firstDisplay.sleep(); 
         } 
         firstDisplay.dispose(); 
        } 
        }); 



    } 


    public void selectionChanged(IAction action, ISelection selection) { 
    } 


    public void dispose() { 
    } 

    public void init(IWorkbenchWindow window) { 
     this.window = window; 
    } 
} 

Antwort

0

Nur eine Vermutung, aber Sie definieren einen neuen Display 'firstDisplay' in Ihrem Runnable.

Sollten Sie nicht auch eine syncExec(Runable) für alle Aktionen (Aktualisierung der Benutzeroberfläche), die Sie auf diesem Display nehmen?


Eigentlich ist die OP Abhishek Choudhary Berichte, die er braucht nicht die zusätzliche Anzeige ‚firstDisplay‘ und führt alles, was er Display innerhalb der einzelnen syncExec(Runable) mit dem Standard tun müssen.

+0

So ist es nicht möglich, den gesamten Satz von Code in einem einzigen ausführbaren Eintrag –

+0

@Abhishek: Ich glaube nicht, aber ich habe es nicht getestet. Haben Sie das verschachtelte 'syncExec' für Ihr' 'firstDisplay'' versucht? Ist die Ausnahme erneut aufgetreten? – VonC

+0

Hallo. Endlich habe ich die Lösung :). Ihr Punkt war korrekt, da Display bereits eine UI-Aktualisierungseinheit war. –