Java Problem mit JButton

tshape

Ensign
Registriert
Juli 2008
Beiträge
187
Hallo,

ich bin gerade bei GUI-Programmierung des Clients für meinen WebService.

Ich habe folgendes Problem:

Wenn man auf den JButton "Connect" klickt, soll die Verbindung zu dem Server aufgebaut werden. Da es auch länger dauern kann, wollte ich, dass während der Verbindungsaufbau auf einem JLabel zB "Connecting" erscheint.

In der Methode

public void mouseClicked(MouseEvent e)

überprüfe ich, ob das Event von meinem "Connect"-Button stamm. Wenn das der Fall ist,
schreibe ich "Connecting" auf ein Label und danach wird Verbindung aufgebaut.

Alles schön und gut, nur macht das Programm nicht was ich will. Es wird erstmal nichts auf Label geschrieben, sondern es wird gleich die Verbindung mit Server hergestellt. Danach wird dieses Label einfach mit der Antwort vom Server überschrieben.

Hat jemand eine Idee wie ich "Connecting" anzeigen kann?

Gruß
tshape
 
Ohne einen Codeschnipsel wird dir da wohl kaum geholfen werden (können)...

Also her damit.
 
eine Frage:
Warum benutz du die MouseClicked-Methode um den Klick auf einen Button abzufangen? Wäre ein ActionListener nicht sinniger?

Aber zum eigentlichen Thema:

offensichtlich wird in der MouseClicked-Methode nicht dieselbe Instanz benutzt wie im Fenster angezeigt wird. Es könnte daran liegen, dass sich beide Instanzen in verschiedenen Threads befinden, aber ohne Code wird man das kaum rausfinden können.
 
Hi,

hier ist ein Teil von meinem Code:


if (e.getSource() == bConnect) {


label.setText("<HTML><BODY>" + "Connecting to Server"
+ "</BODY></HTML>");

try {

WSClient cClient = new WSClient();
String run = cClient.run(input.getText());
...
}catch(Exception e){}
}

Also der Text "Connecting to Server" erscheint erst, wenn die Web-Methode run() ausgeführt wurde.
Ich hätte aber gerne, dass der Text vor der Ausführung der Methode erscheint.

Gruß
tshape
 
Danke für den Hinweis, aber es hat leider nicht geholfen.

Weitere Information:

Nach dem Klick auf den Button ist die GUI eingefroren bis die Antwort vom Server eingetroffen ist.
 
Dass die GUI einfriert, ist völlig logisch. Der Code, der im MouseListener ausgeführt wird, hängt in der EventQueue der GUI. Das Neuschreiben des Labels wird dort rangehängt, also erst nach kompletter Abarbeitung von mouseClicked() ausgeführt.

Beste Möglichkeit, das zu umgehen, ist die Auslagerung der Client-Server-Kommunikation in einen eigenen Thread.

Übrigens: Poste doch bitte nächstesmal Code, der kompilierfähig ist. Sonst kann der Verdacht entstehen, dass bei dir eine veraltete compilierte Version läuft und der Fehler eigentlich schon längst behoben sein könnte.
 
Danke für den Tipp!!!
Ich habe es einfach mit einem neuen Thread gelöst, aber mit SwingWorker geht es auf jeden Fall auch, villeicht noch eleganter.

Danke an Alle!!
 
Zurück
Oben