SWT Dialogfenster blitzen bei deren Aufruf

haudek

Grünschnabel
Hallo,

ich habe eine kleine (SWT) Applikation , die verschiedene SWT Dialogfenster hat. Unter anderem auch ein Startdialog bevor das Hauptfenster öffnet, bei der man den User aus einer Combobox auswählt.
Bei jedem Dialogfenster ist es aber so, dass irgend etwas (ein GUI Element) beim starten kurz aufblitzt (<1sec.) bevor der Dialog dann normal geöffnet ist.

Kennt jemand das Phänomen?
Wie kann ich das kurze aufblitzen vermeiden?


Als Bsp. mein Applikationstart-code mit der AnmeldeDialog:

App-Start:
Code:
public class AppStart {
	
	public static ArrayList<KundenListenModell> kundenliste = new ArrayList<KundenListenModell>(); 
	public static ArrayList<KundenListenModell> interessentenliste = new ArrayList<KundenListenModell>(); 
	public static ArrayList<KundenListenModell> businesspartnerliste = new ArrayList<KundenListenModell>(); 
	public static ArrayList<Sachbearbeiter>     sachbearbeiterListe = new ArrayList<Sachbearbeiter>();

	
	private AppStart() throws Exception{
    	DBConnection dbVerbindung = new DBConnection();
    	dbVerbindung.open();
	   	DBDatenManager dbDaten = new DBDatenManager();
    	sachbearbeiterListe = dbDaten.readSachbearbeiterListe();
    	Integer actualUser = dbDaten.readActualUser();
    	
    	new AnmeldeDialog(sachbearbeiterListe, actualUser, this);
       	
	}
     
    public void start()		throws Exception {
		Display display = Display.getDefault();
	   	DBDatenManager dbDaten1 = new DBDatenManager();
      	kundenliste = dbDaten1.readKundenListe();
      	interessentenliste = dbDaten1.readInteressentenListe();
      	businesspartnerliste = dbDaten1.readBusinessPartnerListe();

		HauptGUI applikation = new HauptGUI(kundenliste);
		applikation.sShell.open();
		
		

		/*Warten bis Hauptfenster geschlossen wird*/
		while (!applikation.sShell.isDisposed()) {
			//Prüfen, ob Ereignisse warten
			if (!display.readAndDispatch())  display.sleep();
		}
		display.dispose();
    }

	public static void main(String[] args){
		
		try {
			new AppStart();
			DBConnection.close();
	        
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

Anmelde-Dialog:
Code:
public class AnmeldeDialog {

	private Shell sShell = null;  //  @jve:decl-index=0:visual-constraint="10,10"
	private Composite composite = null;
	private Label label = null;
	private Composite composite2 = null;
	private Composite composite1 = null;
	private ProgressBar progressBar = null;
	private CCombo cCombo = null;
	private Button OKbutton = null;
	private Button CancelButton = null;
	private Integer actualUser;  //  @jve:decl-index=0:
	private ArrayList<Sachbearbeiter> sachbearbeiterListe;
	private int showindex;
	private boolean initialApplikationStart;
	private AppStart appStart;

	/** Initialstart des Programms !
	 * Konstruktor des User Anmeldedialogs für den Initialstart des Programms.
	 * Hier wird für das Hauptfenster das Display initialisiert, 
	 * und die Shell-Warteschleife des Hauptfensters erstellt.
	 * 		@param sachbearbeiterListe
	 * 		@param actualUser
	 * 		@param _appStart 
	 */
	public  AnmeldeDialog(ArrayList<Sachbearbeiter> sachbearbeiterListe, 
			Integer actualUser, AppStart _appStart){
		
		Display display = Display.getDefault();
		
		this.sachbearbeiterListe =sachbearbeiterListe;
		this.actualUser = actualUser;
		createSShell();
		comboUser();
		initialApplikationStart = true;
		this.appStart = _appStart;
		OKbutton.setFocus();
		
		
//----Warteschleife für Display-------------
		/*Warten bis Hauptfenster geschlossen wird*/
		while (!sShell.isDisposed()) {
			//Prüfen, ob Ereignisse warten
			if (!display.readAndDispatch())  display.sleep();
		}
		display.dispose();


	}
.......
......
...
 
Das Problem war, das ich zu früh den Befehl
Code:
shell.SetVisible(true);
eingesetzt hatte. Nachdem ich den Befehl ans Ende der Shell-Methode gesetzt hatte, hatte es funktioniert!
 
Zurück