Thread wird nicht beendet

Cymatoxa

Mitglied
moin, ich steh grad TOTAL auf dem schlauch :-(

ich will nur einen thread starten. der macht solange ausgaben und schläfchen im wechsel, bis er mit interrupt() beendet wird. soweit die theorie. in der praxis wird leider nichts beendet. statt dessen bekomm ich die meldung
Code:
java.lang.InterruptedException: sleep interrupted
hier der quelltext:
Code:
public class Ticker extends Thread {

    private long sleep;

    public Ticker(int FPS) {
        sleep = 1000/FPS;
        if (sleep < 1)
            sleep = 1;
    }

    @Override
    public void run() {
        while (!isInterrupted()) {
            sleep();
            System.out.println("läuft >.<");
        }
    }

    private void sleep() {
        try {
            Thread.sleep(sleep);
        } catch (InterruptedException e) {
            System.out.println(e);
        }
    }
}
Code:
    [...]
    private Ticker t = new Ticker(1);
    t.start();
    [...]
    public void keyTyped(KeyEvent e) {t.interrupt();}
die interrupted-variable wird nicht auf true gesetzt.
ich hoffe, ihr könnt mir helfen.
Gruß, Cymatoxa
 
Indem du beim Abfangen der Interrupted-Exception eine eigene bool-Variable setzt und diese statt isInterrupted verwendest.
 
wenn ich mit threads arbeite sieht das im allgemeinen immer so aus
Java:
class bla extends Thread
{
[...]
public void run()
{
while(RUN) //RUN ist eine GLOBALE und in der GESAMTEN APP bool-variable *die gloablität erreich ich durch anlegen in der main-class und übergeben von pointern *pointer nicht im c/c++ sinn sondern refferenzen auf die main-class und dann globaliesierung in der class durch z.B. this.RUN=aufrufer.invoker.main.RUN*
{
[...]
}
}
}
das prinzip das solche variablien bei mir grundsätzlich super-global sind hat den einfachen sinn das ich diese dann durch den entsprechend korrekten bezeichner von jeder stelle meiner apps erreich und einfach ändern kann
ich hab mal i-wo gelesen das man das auf grund der abschaffung von Thread.stop() immer so machen soll *natürlich nich gleich die gesamte Thread.run() davon abhängig machen sondern immer an kritischen stellen oder an stellen zwischen einzelnen schritten wo dann "sauber" abgebrochen werden kann*
 
Zurück