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:
[code=Java]Task task = new Task();
task.start();
try {
task.join();
} catch (InterruptedException e) {
e.printStackTrace();
}[/code]
(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:
[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();
}[/code]
(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