GUI hängt

  • Themenstarter Themenstarter Guest
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo,

mein Problem ist folgendes: ich habe eine RMI-Andwendung geschrieben und möchte, dass ein Wartedialog angezeigt wird, wenn mein Client eine Anfrage an den Server stellt.

Im konkreten Fall handelt es sich um einen Login-Dialog. Der Client startet, der Login-Dialog popt auf und der User muss seine Daten eingeben. Beim Klick auf "Login" bekommt er einen Wartedialog zu sehen, bis der Client die Auswertung vom Server erhält.

Das funktioniert soweit auch:


Code:
public class Actions extends Thread implements Runnable
{
	static int actionID;

	Actions( int ID ){ actionID = ID; }
	
	public void run() 
	{
		int result = 99;
		
		// switch actionID and run corresponding action
		switch( actionID )
		{
			case 1: 	// check USER-LOGIN

// [....] Übergabe von Username und Password an den Server, Ergebnis wird in "result" gespeichert [...]

				Gui.myWaitDialog.setVisible( 0 );
				
				// check result and show dialog if necessary
				switch( result ) 
				{ 
					case 0: // Login fehlgeschlagen
						// Main.showCustomError( "Access denied." );						
						Gui.myLoginDialog.setVisible( 1 );
						break;
					case 1: // Login ok
						// login
						break;
					case 99: // keine Verbindung
						// Main.showCustomError( "Could not connect to database." );
						break;
				}
				break;
			case 2: 
				break;
		}
		
		// wenn das implementiert wird, klappt es
		//try { sleep( 100 ); } catch (InterruptedException e) { e.printStackTrace(); }
	}
}

Das Problem ist, dass es zu einem Durcheinander beim setVisible kommt. Ich habe so oftmals den Effekt, dass bei einem falschen Login mein Wartedialog nicht verschwindet und der Login-Dialog unter diesem erscheint.
Durch den Einsatz der sleep-Funktion konnte ich das zwar in dem Fall beheben aber das Problem tritt wieder auf, wenn ich den "Access denied" - Dialog einsetze. Dann ist der Effekt, dass mein Login-Dialog mit gedrücktem Login-Button wieder erscheint, er scheint zu hängen.

Meine Vermutung ist wie gesagt, dass die aufeinanderfolgenden setVisible-Anweisungen falsch umgesetzt werden und da die Dialoge alle modal sind hängt dann der Login-Dialog irgendwie. Es wird wesentlich besser, wenn ich die sleep-Funktion einbaue aber es tritt leider trotzdem noch auf.

Sicherlich ist es nur ein kleines Problem, wäre echt super, wenn mir jemand weiterhelfen kann! 😀

Philipp
 
Hmm, das hab ich wohl überlesen.
Dann verstehe ich aber nicht warum du Threads und sleep brauchst ???:L
 
weil der wartedialog eine animation beinhaltet. ohne thread würde der dialog einfrieren und das will ich nicht, also lasse ich alle aktionen in einem eigenen thread laufen.
 
Mach mal alle Anweisungen die direkt oder indirekt Einfluss auf die GUI haben in ein SwingUtillities.invokeLater.
Möglich das du ein Thread Problem hast.
 
Also ich hab meine Dialoge immer threadfähig gemacht, nicht die Aktion die der Benutzer ausführt, in deinem Fall der Login. Dabei hatte ich auch noch nie solche Probleme gehabt.
Mein Vorschlag, erweitere deine eigene Dialog Klasse mit Runnable und lass nur den Dialog in einem neuen Thread laufen.

Grüße,
Matthias
 
super, danke! lag tatsächlich am invokeLater :toll:
da hätte ich auch mal selbst drauf kommen können .... naja ... *g*

tolles forum hier, ohne würde ich teilweise verzweifeln! :wink:
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben