Rückmeldeframe für befristete Zeitdauer anzeigen

Status
Nicht offen für weitere Antworten.

Joachim

Mitglied
Hallo,

über eine Antwort, vielleicht sogar eine Lösung, zu dem folgenden Problem würde ich mich sehr freuen.

Aufgabe: Ich habe ein Hauptframe (und die entsprechende Klasse) in dem Wörter eingegeben werden, z.B. "Sommer" (Passend zur Jahreszeit). Stimmt dieses eingegebene Wort mit einem vorgegebenen Schlüsselwort überein, so soll für die Dauer von z.B. 2 Sekunden ein (neuer) Rückmeldeframe angezeigt werden, entweder mit der Beschriftung "richtig" oder "falsch".

Problem: Sobald ich die zeitliche Befristung von 2 sec einführe wird die Beschriftung "richtig"/"falsch" nicht angezeigt. Lasse ich die zeitliche Befristung weg führt dies zu einer korrekten Ausgabe eines Rückmeldeframes mit der zugehörigen Beschriftung "richtig"/"falsch".

Beispielcode:

Code:
public class Hauptframe...

  Rückmeldeframe RF = new Rückmeldeframe();
  RF.ausgeben_richtig();
  try{Thread.sleep(2000)}catch(InterruptedException ie){}
  RF.setVisible(false);
  RF.dispose();
Vielen Dank!!!
 
Prinzipiell ist das Handling von Threads zusammen mit einer GUI etwas schwierig!! Besonders wenn man bedenkt, das es einen EventDispatcherThread gibt und dieser möchte bei seiner Arbeit nicht gestört werden. Am besten ist Du öffnest das Fenster und startest gleihzeitig einen Thread, welcher das Fenster überwacht und zu einem geeigneten Zeitpunkt das Schließen des Fensters veranlasst, dazu solltest Du dann aber die SwingUtilities verwenden.

Schau Dir evtl. mal den folgenden Artikel an:

http://www.java-performance-portal.org/article17.html

Ich hoffe das konnte helfen, ansonsten einfach nochmal einen post absetzen 🙂

Karsten Voigt
http://www.java-performance-portal.org
 
Probiers mal mit javax.swing.Timer oder java.util.Timer. Dann brauchst Du nicht mit hässlichen sleeps zu arbeiten.

Ebenius
 
Für den noch nicht gelösten Fall, befristete Anzeige des Rückmeldefensters, danach Löschen des alten Hauptfensters und Erzeugen eines neuen Hauptfenster versuche ich mal mein Glück damit, wird schon schiefgehen!!!


Sollte sich jemand für eine zumindest funktionierende Lösung interessieren für den Fall, daß das Hauptfenster weiterhin in alter Form weiter bestehen bleibt und das Rückmeldefenster nur für befristete Zeit angezeigt werden soll:

Code:
public class Hauptframe... 

  Rückmeldeframe RF = new Rückmeldeframe(); 
  RF.ausgeben_richtig(); 
  ...

public class Rückmeldeframe()

paint()
{
  g.drawString(...);
  try{Thread.sleep(2000)}catch(InterruptedException ie){} 
  this.setVisible(false); 
  this.dispose(); 
}

Vielen Dank nochmals!!!
 
So und dann noch den Rechner in den Stromsparmodus schicken, während Du zeichnest... Wäre ja schade, wenn in der paint()-Methode während des zwei Sekunden-Schlafes nicht auch noch ein bisschen Energie gespart werden könnte.

Jetzt mal ehrlich: Ist das klug?

Schau mal unter: Swing Tutorial - Threads & Swing nach, warum das so eben nicht sein sollte.

Viel Spaß,
Ebenius
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben