SWT Dialog lässt sich nur einmal öffnen

Status
Nicht offen für weitere Antworten.

fisch

Aktives Mitglied
Hi

also ich habe einen Editor geschrieben bei dem man verschiedene Einstellungen vornehmen kann, dazu wird ein Dialog geöffnet, indem öffne ich wieder eine Dialog um Sachen hinzuzufügen. Ich bekomme bei Starten keinerlei Fehlermeldungen und öffnen lassen sich alle Dialoge auch. Nur wenn ich den letzt genannten zum zweiten mal öffnen will ohne vorher den Elterndialog geschlossen geschlossen und wieder geöffnet zu haben schmiert das ganze Programm ab. Als Fehlermeldung bekomme ich:
Code:
Exception in thread "main" org.eclipse.swt.SWTException: Widget is disposed

Allerdings nur wie gesagt wenn ich den Dialog zweimal direkt hintereinander aufrufe. Habe hier mal die Aufrufe der Dialoge:

Code:
private Shell parent,optionDialog,addShell;

public void widgetSelected(SelectionEvent event)
{
     this.parent	= getParent();
     optionDialog	= new Shell(parent,SWT.DIALOG_TRIM|SWT.APPLICATION_MODAL);
     final TabFolder tabDialog	= new TabFolder(optionDialog,SWT.FLAT|SWT.SHADOW_ETCHED_IN);
......
     optionDialog.open();
		
      Display display	= parent.getDisplay();
      while(!optionDialog.isDisposed()){
			if(!display.readAndDispatch())
				display.sleep();
		}
}


class addFormat implements SelectionListener{
		
		addFormat(Properties prop, Composite composite){
			addShell		= new Shell(optionDialog,SWT.DIALOG_TRIM|SWT.APPLICATION_MODAL);
                }
                
                addShell.open();
			
		saveBt.addSelectionListener(new SelectionAdapter(){
				public void widgetSelected(SelectionEvent event){
					
					addShell.dispose();
				}
			});
}

Vielleicht kann mir da mal einer einen Hinweis geben.
 
Kenne mich nicht so mit SWT aus, aber der Fehler klingt eindeutig: Ist ein Widget erst einmal disposed, kann man es nicht mehr aufrufen. Also entweder nicht disposen, sondern nur "unsichtbar" machen, oder beim zweiten Aufruf ein neues, identisches Widget konstruieren. Wahrscheinlich ist Variante 2 einfacher. Wie gesagt, bin kein SWT-Kenner
 
Erstmal danke für den Hinweis, aber könntest du das mit dem zweiten identischen Widget bißchen näher erklären? Meinst du ich soll das ganze nochmal schreiben oder?
 
Hab das Problem gelöst, hatte vergessen den Eltern Dialog schlafen zu legen. Für jeden den es interessiert, folgendes muss noch in die AddFormat Klasse eingefügt werden

Code:
addShell.open();
			
			Display display	= optionDialog.getDisplay();
			while(!addShell.isDisposed()){
				if(!display.readAndDispatch())
					display.sleep();
			}
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben