Timer oder Thread.sleep

sabykos

Neues Mitglied
Hallo zusammen,
ich arbeite gerade an einem Tower Defense Projekt. Hierbei nutze ich ich für die Darstellung der GUI Swing.

Geplant habe ich, dass vor jedem Level 15 Sekunden Zeit bleibt damit der Spieler sich auf die Welle vorbereiten kann. Diese 15 Sekunden sollen am Rand des Spielfeldes heruntergezählt werden. Zur Realisierung habe ich zwei Alternativen versucht.

1. Möglichkeit über Multithreadening. Ich habe eine innere Klasse geschrieben, die 15 mal eine Schleife ausführt und im Schleifenrumpf jeweils 1 Sek wartet und dann die Anzeige aktualisiert.
Nach dem startet den Threads habe ich versucht den Hauptthread auf den Thread warten zu lassen:

Java:
Task task = new Task();
		task.start();
		try {
			task.join();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
(Task ist hierbei innere Klasse die von Thread erbt.)

Durch Überprüfung über die Console weiß ich, dass mein Programm ganz genau das macht was es soll. Das Spiel läuft bis zum Ende fehlerfrei.
Das Problem ist nur: Das GUI-Fenster wird schwarz (Wahrscheinlich weil ich den Hauptthread über join gestoppt habe. Aber ich kann join nicht weglassen, sonst lauft der Hauptthread einfach weiter und das Level beginnt sofort.) Außerdem sind während die GUI schwarz ist natürlich Benutzereingaben unmöglich.

2. Möglicheit mit Timer. Ich habe die Warteprozedur von einem Timer ausführen zu lassen. Nachdem die 15 Sekunden herum sind stoppe ich mit t.stop();. Hierzu foldender Code:

Java:
	Task task = new Task();
		t = new javax.swing.Timer(GP_TICK, task);
		t.setRepeats(true);
		t.start();
		try {
			wait();
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
(Task ist hierbei eine innere Klasse die ActionListener implementiert.)
Die 15 Sekunden werden in der GUI heruntergezählt und der Zähler an der Seite aktualisiert wie ich es will. Jedoch bricht der Hauptthread bei wait() ab (Wahrscheinlich nutze ich es falsch). Das führt dazu, dass das Programm nach dem der Timer-Thread fertig ist abbricht.

Ich benötige nun also entweder eine Möglichkeit Multithreading zu betreiben ohne, dass die GUI abbricht oder eine Möglichkeit meinen Hauptthread sinnvoll mit meinem Timer zu synchronisieren.

Ich bedanke ich mich schonmal.

Viele Grüße

Sabine Koszig
 

pl4gu33

Top Contributor
Threads sind schon etwas her daher versuch ich das gerade wieder abzurufen soweit ich noch weiß
musst du das so machen

while( Bedinung) (in deinem Fall, dass der Timer noch nicht bei 0 ist)
wait();


und dieses Wait() "weckst" du dann mit einem notifyAll() (oder auch notify()) wenn der Timer 0 ist ... dann wird die Bedinung wieder geprüft und wenn er abgelaufen ist wird weitergemacht.

Daher denke ich, dass das Programm einfach die ganze Zeit in wait() verweilt, weil du deinen Thread nicht weckst.

(ich hoffe das war so richtig erklärt ;))
 
Zuletzt bearbeitet:

sabykos

Neues Mitglied
Vielen Dank erstmal für deinen Vorschlag!

Ich habe das getestet. Damit das mit wait() und notify() klappt muss die Methode in der das wait steht zusatzlich synchronized sein. Wenn man das alles hinzugefügt hat erzeugt wait immerhin keine Exception mehr, jedoch ist nun auch hier das GUI-Fenster schwarz.

Meiner Minung nach liegt das Problem darin, dass ich egal ob ich mit Thread und join oder mit Timer und wait arbeite immer der EventDispatcherThread blockiere (Deshalb wird die GUI schwarz und Benutzereingaben werden nicht mehr registriert). Ich muss es irgendwie schaffen, dass die weitere Programmausführung (Level starten usw.) auf das Ende des Timers wartet ohne dass dabei der EventDispatcher Thread blockiert wird.

Noch jemand ne Idee?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
E JDialog mit count down timer AWT, Swing, JavaFX & SWT 1
M 2D-Grafik timer bei Analoguhr AWT, Swing, JavaFX & SWT 2
A Timer AWT, Swing, JavaFX & SWT 1
H Timer ohne alles lahmzulegen? AWT, Swing, JavaFX & SWT 2
O Timer in JOptionPane anzeigen AWT, Swing, JavaFX & SWT 2
ralfb1105 Swing Timer in SwingWorker stoppen AWT, Swing, JavaFX & SWT 4
T Timer und GIF Animationen pausieren während Maus sich bewegt AWT, Swing, JavaFX & SWT 4
W Swing JLabel jede Sekunde aktualisieren, ohne Timer zu benutzen AWT, Swing, JavaFX & SWT 4
D Timer für Bildfolge in einem jLabel AWT, Swing, JavaFX & SWT 5
M Event Handling MousePressed vs. Timer! AWT, Swing, JavaFX & SWT 5
F Java Timer Bug? AWT, Swing, JavaFX & SWT 6
B Timer, TimerTask und Warten AWT, Swing, JavaFX & SWT 4
R Performance Drag and Drop & Timer AWT, Swing, JavaFX & SWT 3
E Problem mit Timer und Swing AWT, Swing, JavaFX & SWT 8
N AWT Timer überschreiben? AWT, Swing, JavaFX & SWT 8
P Label rotieren mit Timer AWT, Swing, JavaFX & SWT 5
F Swing GUI und Model mit Timer AWT, Swing, JavaFX & SWT 13
K Threads - Timer - run() mehrfach parallel? AWT, Swing, JavaFX & SWT 2
J Nach Timer ausführen AWT, Swing, JavaFX & SWT 6
D Timer JFrame AWT, Swing, JavaFX & SWT 7
F Swing timer nimmt delay nicht an AWT, Swing, JavaFX & SWT 2
S Swing Timer, Countdown AWT, Swing, JavaFX & SWT 2
F Timer welches JPanel aktualisiert AWT, Swing, JavaFX & SWT 6
H Timer/Stoppuhr in MenuBar anzeigen AWT, Swing, JavaFX & SWT 4
D Applet Methode in Timer einbinden AWT, Swing, JavaFX & SWT 6
F Applet Applet starten...(+Timer?) AWT, Swing, JavaFX & SWT 12
R Probleme mit Swing Timer AWT, Swing, JavaFX & SWT 6
C Timer Problem AWT, Swing, JavaFX & SWT 5
VfL_Freak Swing kann ich einen laufenden Timer mitten in der Ausführung abbrechen? AWT, Swing, JavaFX & SWT 6
H Swing Timer Probleme AWT, Swing, JavaFX & SWT 5
Burny91 Swing Mit Timer JLabel updaten AWT, Swing, JavaFX & SWT 2
P Game of Life - PaintComponent-Problem / Timer? AWT, Swing, JavaFX & SWT 8
B JLabel mittels Timer und setLocation verschieben AWT, Swing, JavaFX & SWT 3
O Swing es können keine neuen Labels hinzufügt werden während der Timer läuft AWT, Swing, JavaFX & SWT 14
C Timer erstellen? AWT, Swing, JavaFX & SWT 2
E AWT Problem mit Repaint (in Loop oder Timer) AWT, Swing, JavaFX & SWT 3
K Timer und Threads ruckeln für Fotoschwenk AWT, Swing, JavaFX & SWT 3
L Timer Swing GUI AWT, Swing, JavaFX & SWT 2
G Swing Timer stoppen AWT, Swing, JavaFX & SWT 4
B Swing-Timer AWT, Swing, JavaFX & SWT 4
D javax.swing.Timer bringt NullPointerException AWT, Swing, JavaFX & SWT 4
J Swing timer? AWT, Swing, JavaFX & SWT 2
C Timer, Darstellung einer Uhr AWT, Swing, JavaFX & SWT 4
Z javax.swing.Timer: wie stoppen??? AWT, Swing, JavaFX & SWT 9
P thread nimmt veränderte boolean nicht AWT, Swing, JavaFX & SWT 7
N JFrame loescht alles, sobald der Thread zuende ist AWT, Swing, JavaFX & SWT 22
M Server/Client thread von GUI Trennen AWT, Swing, JavaFX & SWT 2
K JavaFx, Sound Aufnahme und Thread AWT, Swing, JavaFX & SWT 0
T Exception in thread "main" java.lang.NoClassDefFoundError AWT, Swing, JavaFX & SWT 4
G Exception javafx Thread -> caused by removing children while in EventHandler AWT, Swing, JavaFX & SWT 28
H Event Handling Thread - Abruf der get-Methode AWT, Swing, JavaFX & SWT 5
J "Exception in thread "AWT-EventQueue-0"" Fehler AWT, Swing, JavaFX & SWT 3
G Thread starten Swing AWT, Swing, JavaFX & SWT 5
C Thread verwalten AWT, Swing, JavaFX & SWT 2
A Swing Exception in thread "AWT-EventQueue-0" AWT, Swing, JavaFX & SWT 1
S JavaFX Exception in thread "JavaFX Application Thread" AWT, Swing, JavaFX & SWT 3
L Label im JavaFX Thread Updaten AWT, Swing, JavaFX & SWT 3
ralfb1105 JavaFX Alert Confirmation Dialog aus einem Service Thread AWT, Swing, JavaFX & SWT 8
ralfb1105 JavaFX MVC: Thread in Model Class mit Ausgabe in TextArea AWT, Swing, JavaFX & SWT 10
D Swing SwingUtils / Thread Problem AWT, Swing, JavaFX & SWT 3
J Thread per Button starten AWT, Swing, JavaFX & SWT 10
J Thread kennt JButton nicht. AWT, Swing, JavaFX & SWT 11
T JavaFX Task / Thread / FXThread Komplikationen AWT, Swing, JavaFX & SWT 5
O Swing Event Dispatch Thread AWT, Swing, JavaFX & SWT 1
L JavaFX UI Thread block AWT, Swing, JavaFX & SWT 13
X Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: -1 AWT, Swing, JavaFX & SWT 6
sandaime Swing Thread für CMD auslesen AWT, Swing, JavaFX & SWT 16
E JavaFX JavaFX Application in Thread ausführen AWT, Swing, JavaFX & SWT 1
D JavaFX UI-Thread und DB-Thread trennen um z.B. Ladebalken anzuzeigen AWT, Swing, JavaFX & SWT 15
T JavaFX Controller im extra Thread AWT, Swing, JavaFX & SWT 0
T Swing 2 Thread.sleep parallel laufen lassen AWT, Swing, JavaFX & SWT 4
L Zweites Fenster mit Thread AWT, Swing, JavaFX & SWT 0
E JavaFX Stage.show() in ursprünglichem Thread starten AWT, Swing, JavaFX & SWT 7
L Swing Frame in Thread wird nicht gezeichnet AWT, Swing, JavaFX & SWT 2
N Programm mit Swing und Thread, Figur bewegen sich nicht AWT, Swing, JavaFX & SWT 6
C Im ActionListener Buttons disablen, einen Thread starten, dann Buttons enablen AWT, Swing, JavaFX & SWT 2
C Thread-/ Simulations- Problem AWT, Swing, JavaFX & SWT 18
T Swing Button bleibt grau [=> UI hat sich aufgehängt, Aufgabe in Thread auslagern] AWT, Swing, JavaFX & SWT 3
M Thread-Frage in SWT AWT, Swing, JavaFX & SWT 1
Q GUI außerhalb GUI-Thread updaten - GUI friert ein AWT, Swing, JavaFX & SWT 18
C Thread in Klassen starten AWT, Swing, JavaFX & SWT 4
L exception in thread awt-eventqueue-0 java.lang.nullpointerexception AWT, Swing, JavaFX & SWT 2
S Swing Exception in thread "AWT-EventQueue-0" bei Jlabel AWT, Swing, JavaFX & SWT 4
D SWT SWT Elemente aus anderen Klassen aufrufen - Invalid thread access AWT, Swing, JavaFX & SWT 6
K JavaFX Tableview mit fxml ohne Aktualiserung trotz Thread AWT, Swing, JavaFX & SWT 13
K Event Handling 2 Buttons und Thread stop AWT, Swing, JavaFX & SWT 3
C Swing Update von swing-TableModels per Thread. Eins geht, das andere nicht, warum? AWT, Swing, JavaFX & SWT 12
V JLabel bzw. GUI aus externen Thread ansteuern AWT, Swing, JavaFX & SWT 3
J Applet Paralleles Thread Handling AWT, Swing, JavaFX & SWT 3
H Swing JfreeChart aktualisieren - mit daten aus thread AWT, Swing, JavaFX & SWT 3
T Java Swing Main GUI Thread AWT, Swing, JavaFX & SWT 3
C Event Handling Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException AWT, Swing, JavaFX & SWT 43
T Table-Zeilen mit Thread einfärben AWT, Swing, JavaFX & SWT 15
F Swing GUI-Thread für automatisches Update nutzen AWT, Swing, JavaFX & SWT 10
Y KeyListener, GUI Thread, repaint AWT, Swing, JavaFX & SWT 7
V Nullpointerexception (etwas mit thread und jframe) AWT, Swing, JavaFX & SWT 3
P Problem Thread.sleep() und JProgressBar AWT, Swing, JavaFX & SWT 7
S SWT GUI-Thread AWT, Swing, JavaFX & SWT 11
A Thread und sleep(1000); AWT, Swing, JavaFX & SWT 7
B Swing Thread+Animation AWT, Swing, JavaFX & SWT 7

Ähnliche Java Themen

Neue Themen


Oben