HELP Oberfläche friert ein ?!

MariusMeuser

Mitglied
Hallo,
habe folgendes Problem:

Ich habe eine GUI für ein Programm, die sobald das Programm
folgende Stelle erreicht :

Code:
while (selectedPlugin.isBusy()) {        
        Thread timer = new Thread();
        try {          
          timer.sleep(1500);          
          if (hasStatus) {
            StatusLabel.setText(selectedPlugin.getStatus());
          }
        }
        catch (Exception ex) {
          System.out.println(ex.getMessage());
        }
      }

nicht mehr reagiert, bzw. nicht mehr bedienbar ist ! Allerdings wollte ich das so bauen, dass das Programm auf einen evtl. eingehenden Abort-Befehl des Benutzers reagieren kann.
Ich vermute mal, dass ich da irgendwie mit Threads rangehen muss, habe allerdings in diesem
Bereich null Vorkenntnisse. Daher möchte ich hier um Hilfe bitten.

THX im Vorraus

MfG

Marius Meuser
 
Naja, was gibt denn deine
Code:
 selectedPlugin.isBusy()
zurück?

Klingt fast so, als würdest du eine Endlosschleife gebaut haben.
Wird in der Methode während der Schleife nochmal die boolean variable, die zurückkommt geändert? (z.B. über die getStatus())
 
Code:
 Thread timer = new Thread();
        try {          
          timer.sleep(1500);          
          if (hasStatus) {
            StatusLabel.setText(selectedPlugin.getStatus());
          }

Einen Thread zu erstellen und diesen nicht zu starten macht kein sinn.

Ich verweise hier nochmal auf das Java Buch, insbesondere schau dir an wozu mann eine run() Methode überschreibt und was die Methode start() bewirkt.
 
Also, der obige Code bewirkt folgendes :

Es ist eine Art Endlosschleifen, die alle 1500ms überprüft ob sich der Wert von isBusy verändert. Das hat so auch seine Richtigkeit. Die Schleife soll solange laufen, bis ein externes Programm seine Arbeit beendet hat und dies über isBusy mitteilt !
Den Thread habe ich erst mal nur erstell, damit ich die .sleep Methode nutzen kann, erschien mir die einfachste Möglichkeit, eine Zeit für die Abfragen festzulegen !

Meine Frage nochmal anders formuliert:

Gibt es eine Möglichkeit, wenn JA welche, dass meine GUI, die obige Schleife beinhaltet, nicht einfriet wenn die Schleife läuft, sondern weiter bedient werden kann

Bis jetzt friert sie ein und daher ist eine Beedigung der Schleife per Abbruch Button nicht möglich !

MfG

MariusMeuser
 
also die sleep()-Methode is statisch, geht also einfach über Thread.sleep(1500);
Man brauch dafür kein Objekt.

Hast du mal versucht, dir auszugeben, was bei is busy zurückkommt? Vielleicht kommt da nur true zurück und es beendet sich gar nix. Wenn du gar keinen Abbruchbutton in die Schleife integrierst, läuft er solang die Schleife durch bis halt die isBusy() false is.

Wie wär's, wenn du so tust:

Code:
class UeberpruefeThread implements Runnable{
  
  public void run(){
 //hier deine isBusy()-Schleife rein
  }
  }

Aufruf über
Code:
Thread ueberpruefeThread = new UeberpruefeThread();
  ueberpruefeThread.start();
denn machste deine GUI auch genauso in einen Thread und wenn du beide in einer Klasse startest, kannst du aus der actionPerformed() (nach dem Klick auf Abbruch)
Code:
ueberpruefeThread.interrupt()
aufrufen.
Ich hoffe, das is jetzt sauberes Java gewesen. Threads hab ich das letzte mal vor nem Jahr gemacht ;)
 
Zuletzt bearbeitet:
Vielleicht war es auch
Code:
 ueberpruefeThread.yield()

Mußte mal probieren.

So würd ich da mit den Infos von dir rangehen.

Hoffe, dass hilft.
 
MariusMeuser hat gesagt.:
Den Thread habe ich erst mal nur erstell, damit ich die .sleep Methode nutzen kann, erschien mir die einfachste Möglichkeit, eine Zeit für die Abfragen festzulegen !

Sorry aber es ist unnötig einen Thread zu erstellen um sleep zu nutzen.
Thread.sleep() hätte ausgereicht.
 
Zurück