warten

Status
Nicht offen für weitere Antworten.
G

Gast123

Gast
Folgendes Problem:

Ich möchte eine Zahl in einem Textfeld ausgeben, eine Weile warten und dann die nächste Zahl in dem selben Textfeld ausgeben.

Code:
this.AufgabeT.setText(engine.zahlen[0] + "");
     System.out.println (1.);
     warte();
     this.AufgabeT.setText(engine.zahlen[1] + "");
     System.out.println (2.);
     warte();
     this.AufgabeT.setText(engine.zahlen[2] + "");
     System.out.println (3.);
     warte();

Code:
  public void warte()
  {
    try {
        Thread.sleep(5000);
    } catch (InterruptedException e) {}
  }

1.
2.
3.
wird ausgegeben (die println's).

Die Zahlen werden jedoch nicht in den Textfeldern angezeigt. Erst nachdem das dritte mal warte() aufgerufen wurde, wird eine Zahl angezeigt, aber eben nur eine.

Ich möchte jedoch, dass Zahl0 ins Textfeld geschrieben wird, 5000gewartet wird, Zahl1 ins Textfeld geschrieben wird usw.
Was muss ich ändern???
 
G

Gast123

Gast
Anonymous hat gesagt.:
Die Zahlen werden jedoch nicht in den Textfeldern angezeigt. Erst nachdem das dritte mal warte() aufgerufen wurde, wird eine Zahl angezeigt, aber eben nur eine.

Ergänzung:
Es wird nur die letzte Zahl im Textfeld angezeigt. Die vorigen beiden nicht!
 

unknown_member

Bekanntes Mitglied
Also, meine Vermutung ist, dass da ein Thread-Problem aufgetreten ist. Denn Swing (das du warscheinlich benutzt) ist nicht so ganz threadsicher, das bedeutet, dass es zum Beispiel solche "Warte"-Sachen nicht korrekt "abspielt".
Das ist mir auch schonmal passiert und ist ziemlich ärgerlich.

Lösen würde ich es, indem ich einen neuen Thread erstelle. Falls du nicht weißt, wie das geht, schaust du hier oder fragst wenn du's nicht rauskriegst nochmal danach. Google ist dein Freund.


Ich hoffe ich habe dir weitergeholfen, unknown_member
 
G

Guest

Gast
Danke für den Tipp, aber mit Threads kann ich leider gar nichts anfangen. Bin absoluter Java-Neuling.

Ja ich benutze Swing. Ich schildere mal ganz kurz, was ich machen möchte:
Programm startet
User drückt Button
Zahl1 wird 3 Sekunden lang angezeigt
Zahl2 wird Sekunden lang angezeigt.
Zahl3 wird 3 Sekunden lang angezeigt
Ende
 

unknown_member

Bekanntes Mitglied
und wo soll das angezeigt werden? In dem TextField oder in der Konsole? Warscheinlich im TextField.

Also das mit den Threads geht so:

Du erstellst eine neue Klasse, vllt hier die klasse "Numbers". Diese Klasse darf aber nichts mehr an dem Hauptbild der GUI ändern. Also keinen neuen Titel usw.

Dann schreibst du

Code:
public class Numbers extends MeineHauptKlasse

Anstatt MeineHauptKlasse natürlich deine Klasse. Wenn du das hast, schreibst du eine neue Methode. Wie im Beispiel "run()". Das geht so:

Code:
public void run() {

 meinTextField.setText("1");
 warten();

 meinTextField.setText("2");
 warten();

 meinTextField.setText("3");
 warten();

}

wobei warten() in Numbers auch geschrieben sein muss. So, jetzt funktioniert alles. Um das auf den Buttonklick auszuführen schreibst du in den ActionListener:
Code:
public void actionPerformed(ActionEvent evt) {

if (event.getSource() == meinAuslöseButton) {

      Numbers num = new Numbers();
      num.run();
  }
}


Und fertig.


_____
MfG, unknown_member


PS: Für "Ende" natürlich "System.exit(0)", das beendet das Prog. ABer das weißt du ja warscheinlich.
 

Marco13

Top Contributor
unknown_handball hat schon den richtigen Tipp gegeben. Nochmal genauer:

Wichtig wäre in diesem Fall, zu wissen, wo der Code steht, den du gepostet hast. Vermutlich steht er in der actionPerformed-Methode (oder einer, die von dort aufgerufen wird).

Das Problem ist nun:

Der Code, den du gepostet hast, wird vom "Event-Dispatch-Thread" abgearbeitet. Das Neuzeichnen des TextFields (nachdem der Text gesetzt wurde) wird aber AUCH vom Event-Dispatch-Thread erledigt. Und das kann er natürlich ERST dann tun, NACHDEM er deinen Code-Teil abgearbeitet hat.

Abhilfe (in Anlehnung an das was unknown_handball gepostet hat)
Code:
public class Numbers extends Runnable // Nicht irgendeine Klasse, sondern Runnable!
{
    public void run() 
    { 
         ... wie bei unknown_handball ...
    }
}

....
// Dann in deiner Hauptklasse:

public void actionPerformed(ActionEvent evt) {
     if (event.getSource() == meinAuslöseButton) {
          new Thread(new Numbers()).start();
     }
}
 
G

Gast123

Gast
Ich habe jetzt eine neue Datei mit der Klasse erstellt:
Code:
public class Numbers extends MeineKlasse implements Runnable
Das führt zu dem Fehler: package MeineKlasse does not exist

Das 2. Beispiel ohne extends meine Klasse und nur mit runnable kann ich ja nicht benutzen, da er ja dann
MeineKlasse.AufgabeT.setText("1");
nicht mehr kennt.

Was kann ich tun?
P.S.: Kann ich das Feld nicht einfach nach jeden setText neu zeichnen lassen???
 
G

Guest

Gast
1.)
Code:
public class Numbers  extends MC implements Runnable
{
    // Konstruktor
    public Numbers()
    {
       super("bla");
    }

    // Anfang Ereignisprozeduren
    public void run()
    {
       this.AufgabeT.setText("1");
       warte();

       this.AufgabeT.setText("2");
       warte();

       this.AufgabeT.setText("3");
       warte();
  }

  public void warte()
  {
    try {
        Thread.sleep(5000);
    } catch (InterruptedException e) {}
  }
  // Ende Ereignisprozeduren

}
Code:
public void jButton1ActionPerformed(ActionEvent evt) {
         if (evt.getSource() == jButton1) {
            Numbers num = new Numbers();
            num.run();
         }
}
Es passiert folgendes:
- Programm startet
- Ich klicke auf den Button
- Ein neues Fenster mit Titel bla öffnet sich, bleibt eine Weile komplett grau(keine textfelder, label oder irgendwas zu sehn, nur grau), dann alles wieder sichtbar und letzte zahl steht im Feld.

2.) Wenn ich den zweiten oben zu sehenden Code folgendermaßen ändere:
Code:
public void jButton1ActionPerformed(ActionEvent evt) {
         if (evt.getSource() == jButton1) {
            new Thread(new Numbers()).start();
         }
}
dann passiert folgendes:
- Nach dem Klick auf den Button öffnet sich ein neues Fenster mit Titel bla, zahl1 wird angezeigt, dann zahl2, dann zahl3

Das ist ja schonmal super!!! Problem ist nur dass ich bloß ein Fenster haben will. Aber da ich die numbers-Methode ja von meiner ableite, bekomme ich zwei Fenster. Was kann ich machen, um numbers "in dem ersten fenster auszuführen"????
 
G

Guest

Gast
Das Problem liegt denke ich hier:
Code:
    public void run()
    {
         ... wie bei unknown_handball ...
    }
Wenn ich es ohne Vererbung mache, dann geht genau das nämlich nicht! Nun hab ich zwar eine tolle run-Methode aber mit der kann ich gar nicht auf mein Textfeld zugreifen.

Was jetzt?
 
S

SlaterB

Gast
übergib Numbers das MC als Parameter, Erben musst und darfst du dann nicht

Code:
private MC x;

public Numbers(MC x) {
  this.x = x;
}

public void run {
   x.tueWas();
}


public void jButton1ActionPerformed(ActionEvent evt) {
         if (evt.getSource() == jButton1) {
            new Thread(new Numbers(x)).start();
         }
}

und nie die run-Operation an Threads rufen, immer nur start()
 
G

Guest

Gast
Super. Endlich klappt es!!!!

Code:
//Numbers.java

public class Numbers implements Runnable
{
    // Attribute
    private MindCoach MC;

    // Konstruktor
    public Numbers(MindCoach x)
    {
     this.MC = x;
    }

    // Anfang Ereignisprozeduren
    public void run()
    {
    
     int anzZahlen = 3;
     int zahlen[] = {1,2,3};
     
     // Zahlen anzeigen
     for (int i=0; i<anzZahlen; i++)
     {
      this.MC.AufgabeT.setText(zahlen[i] + "");
      this.warte();
     }
  }

  public void warte()
  {
    try {
        Thread.sleep(5000);
    } catch (InterruptedException e) {}
  }
  // Ende Ereignisprozeduren

}

Code:
// Aufruf

  public void jButton1ActionPerformed(ActionEvent evt) {   
         // Wenn der Button gedrückt wurde, die Zahlen anzeigen
         if (evt.getSource() == jButton1) {
            new Thread(new Numbers(this)).start();
         }
  }

Vielen Dank euch allen!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
H JavaFX Hintergrundfarbe ändern, warten, Hintergrundfarbe wieder ändern Java Basics - Anfänger-Themen 34
D Programm auf Enter warten lassen Java Basics - Anfänger-Themen 2
E Richtiges Warten Java Basics - Anfänger-Themen 8
S in ActionListener auf Eingabe aus anderem Frame warten Java Basics - Anfänger-Themen 2
G Wie kann ich 1s lang warten? Java Basics - Anfänger-Themen 1
D JFrame - 10 Sekunden bis zum schließen warten. Java Basics - Anfänger-Themen 2
R Threads aufeinander warten lassen? Java Basics - Anfänger-Themen 10
S Input/Output In Java Swing auf Button warten? Java Basics - Anfänger-Themen 9
A Thread auf anderen warten Java Basics - Anfänger-Themen 2
C Warten auf Antwort Java Basics - Anfänger-Themen 22
S Threads Programm terminiert statt zu warten Java Basics - Anfänger-Themen 20
E ExecutorService warten bis alles fertig? Java Basics - Anfänger-Themen 5
A Threads Eine Klasse muss auf Variable der Anderen warten. Java Basics - Anfänger-Themen 6
D Input/Output Auf Tasteneingabe warten Java Basics - Anfänger-Themen 4
A Activity1 soll auf Activity2 warten (Camera-Intent) Java Basics - Anfänger-Themen 5
D Threads Kartenspiel - auf legen warten Java Basics - Anfänger-Themen 15
B Methode warten lassen bis Button gedrückt wird Java Basics - Anfänger-Themen 16
JAVAnnik auf Threadende warten Java Basics - Anfänger-Themen 6
H Auf Threads warten Java Basics - Anfänger-Themen 3
S Warten bis alle Threads fertig sind Java Basics - Anfänger-Themen 12
I Auf DB-Operation warten Java Basics - Anfänger-Themen 2
R Thread soll auf andere Threads warten Java Basics - Anfänger-Themen 3
T Warteschlange warten lassen bis Ereignis Java Basics - Anfänger-Themen 27
A Main warten lassen bis Variable durch Button übergeben wird Java Basics - Anfänger-Themen 2
V Warten bis die Länge eines Strings nicht mehr 0 ist Java Basics - Anfänger-Themen 13
M prozess starten und warten bis dieser sich beendet Java Basics - Anfänger-Themen 3
G Eigene Klasse für externe Befehle - Warten auf Prozesse Java Basics - Anfänger-Themen 6
D Auf Event warten Java Basics - Anfänger-Themen 4
F Logikproblem: Auf Mouselistener warten Java Basics - Anfänger-Themen 6
E Auf Mouselistener warten?! Java Basics - Anfänger-Themen 20
M Warten bis Thread an einem Semaphore angekommen ist Java Basics - Anfänger-Themen 4
C countdown/timer/Zeit warten lassen Java Basics - Anfänger-Themen 14
S Auf andere Methode warten Java Basics - Anfänger-Themen 7
B Während Schleife nicht auf Eingabe warten Java Basics - Anfänger-Themen 2
T auf vbscript warten Java Basics - Anfänger-Themen 3
S Thread warten abbrechen? Java Basics - Anfänger-Themen 5
C auf beendigung eines threads warten Java Basics - Anfänger-Themen 6
P Warten auf KeyTyped Java Basics - Anfänger-Themen 7
M warten in einer while-schleife Java Basics - Anfänger-Themen 12
L programm zum warten zwingen Java Basics - Anfänger-Themen 4
B Auf Programm warten Java Basics - Anfänger-Themen 2
S Auf Object warten Java Basics - Anfänger-Themen 2
K Auf File- Befehl warten. Java Basics - Anfänger-Themen 10
T eine Sekunde warten Java Basics - Anfänger-Themen 11
C Konsolenanwendung auf belibige Taste warten Java Basics - Anfänger-Themen 2
D Auf anderes Fenster Warten Java Basics - Anfänger-Themen 6
A Warten auf Userinput Java Basics - Anfänger-Themen 2
G Bei JDialog warten Java Basics - Anfänger-Themen 5
T Auf Selection warten Java Basics - Anfänger-Themen 7
N Java Insel 6 lesen oder auf 7 warten ? Java Basics - Anfänger-Themen 11
S Programmablauf pausieren, bzw. auf Eingabe warten Java Basics - Anfänger-Themen 4
G Warten auf Eingabe Java Basics - Anfänger-Themen 12
G Thread soll warten Java Basics - Anfänger-Themen 5
F 1 Minute warten Java Basics - Anfänger-Themen 18
S Thread auf Thread warten lassen. Java Basics - Anfänger-Themen 2
G auf ende mehrerer threads warten Java Basics - Anfänger-Themen 2
B Timer / Thread warten Java Basics - Anfänger-Themen 3
P Warten-Fenster Java Basics - Anfänger-Themen 8
vogella *Gelöst *Im Programm warten (wait()) Java Basics - Anfänger-Themen 2
A Bitte Warten Java Basics - Anfänger-Themen 2
P Externen Proceß starten und warten bis beendet? Java Basics - Anfänger-Themen 2
J Threads: warten bis erste aktion ausgeführt wurde Java Basics - Anfänger-Themen 6
G Eine Methode zum Warten? Java Basics - Anfänger-Themen 7
G Frage zum Warten auf und Aufwecken von Threads Java Basics - Anfänger-Themen 2
L Einfaches Warten in eine Schleife Java Basics - Anfänger-Themen 9
B auf mehrere Threads warten Java Basics - Anfänger-Themen 3
K Animation warten lassen Java Basics - Anfänger-Themen 9
S Auf JInternalFrame warten? Java Basics - Anfänger-Themen 2
R Warten, bis ein Prozess gestartet wurde Java Basics - Anfänger-Themen 23
M x Sekunden warten Java Basics - Anfänger-Themen 13
P Bitte um ein paar Tipps! (Threads, Warten auf Ereignisse,.) Java Basics - Anfänger-Themen 2
M Wie lässt man eine Methode warten ohne Threads zu benutzen? Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben