Problem mit Threads

javaneuling

Grünschnabel
Hallo

Ich habe folgenden Java-Code erstellt:

drawFixPunktYN=true;
drawCueYN=false;
drawObjectYN=false;
repaint(5000);

drawFixPunktYN=false;
drawCueYN=true;
drawObjectYN=false;
repaint(5000);

drawFixPunktYN=false;
drawCueYN=false;
drawObjectYN=true;
repaint();

Dieser Code soll Folgendes erzeugen: Zuerst soll ein Fixpunkt gezeichnet werden, dann soll das Programm 5 sec warten, dann soll ein Pfeil (Cue) gezeichet werden, dann soll das Programm wiederum 5 sec warten und schliesslich soll ein Objekt (ein Rechteck) gezeichnet werden.

Das funktioniert natürlich nicht. Das Programm zeichnet weder den Fixpunkt noch den Pfeil, sondern unmittelbar das Objekt.

Nun habe ich folgendes probiert:

final javax.swing.Timer timer = new javax.swing.Timer(5000,new ActionListener(){
public void actionPerformed(ActionEvent e) {
drawFixPunktYN=false;
drawCueYN=false;
drawObjectYN=true;
repaint();
}
});

SwingUtilities.invokeLater(new Runnable() {
public void run() {
drawFixPunktYN=false;
drawCueYN=true;
drawObjectYN=false;
repaint();
timer.start();
}
});

Das ist zwar nur eine Zwischenlösung, weil das Zeichnen des Fixpunktes gar nicht verlangt wird. Nun zeichnet das Programm den Pfeil, wartet unterschiedlich lange Zeit und zeichnet dann das Objekt.

Meine Fragen:
- Warum dauert es unterschiedlich lang zwischen dem Zeichnen des Pfeils und dem Zeichnen des Objekts? Es ist wichtig, dass die 5 Sekunden stets exakt eingehalten werden.
- Wie kann ich nun noch das Zeichnen des Fixpunktes vor dem Zeichnen des Pfeils und des Objekts hinzufügen?

Vielen Dank für eure Hilfe

Java-Neuling
 
Hallo javaneuling,

versuche es doch mal mit Thread.sleep(5000);.
Achte darauf, dass hierbei ein try-catch-Block verlang wird. Sollte das in deinem Kontext nicht funktionieren führe den gesamten Code innerhalb eines Threads aus.

Code:
public class MyThread extends Thread {

public MyThread() {
}

public void run() {
//dein code
try {
Thread.sleep(5000);
} catch(IrgendeineTimeException) {
//FEHLER, IRGENDWAS IST SCHIEF GELAUFEN
}
//dein code

//wieder Thread.sleep(5000);

//usw...
}

}

Dann den Thread einfach aus einer anderen Klasse mit new MyThread.start(); aufrufen.

Viele Grüße,
BigManu
 
Zurück