Thread ignoriert Anweisungen...

ceiphren

Grünschnabel
hi, zusammen,

ich ab ein kleines Programm, dass einfach nur bilder durchwechseln soll, aber irgendwie zerballert mir das Schlafenlegen das Abarbeiten der Anweisungen:

while(i==0)
{
try {
Thread.sleep(1000);
pic2.moveAbove(pic);
System.out.println("hurra");
} catch (InterruptedException e3) {e3.printStackTrace();}

try {
Thread.sleep(1000);
pic.moveAbove(pic2);
System.out.println("hurra2");
} catch (InterruptedException e3) {e3.printStackTrace();}
}


pic2 und pic sind Label, pic liegt über pic2. Die Schleife geht los, der Thread schläft eine sekunde ein, IGNORIERT pic2.moveAbove(pic); und gibt dann System.out.println("hurra"); korrekt in der Konsole aus.
Warum ignoriert das Programm einfach die Anweisung?
 
Hallo,

ich würde nie den Haupt-Thread schlafen legen, das geht meistens schief, vor allem, wenn man mit GUI arbeitet. Erzeuge dafür am besten einen eigenen Thread und lass ihn laufen:
Java:
final Thread thread = new Thread(new Runnable() {
    public void run() {
        // hier Deine while-Schleife einfügen...
    }
});
thread.start();
Bedenke aber, dass wenn Du auf graphische Komponente aus einem eigenen Thread heraus zugreifst, muss der Zugriff auf folgende Weise erfolgen:
Java:
SwingUtilities.invokeLater(new Runnable() {
    public void run() {
        // hier Zugriff auf GUI-Komponente...
        // z.B.
        label.repaint();
    }
});
sonst, meckert das Programm, dass man aus einem falschen Thread heraus auf den GUI-Thread zugreift.

Wenn das alles nicht hilft, und Deine pic2.moveAbove(pic); Anweisung weiterhin ignoriert wird, würde ich an der Stelle debuggen und schauen, was da geschieht.

Grüße
Vincent
 
Zurück