ERLEDIGT
NEIN
NEIN
ANTWORTEN
5
5
ZUGRIFFE
378
378
EMPFEHLEN
-
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
hier der quelltext:Code :1
java.lang.InterruptedException: sleep interrupted
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
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); } } }die interrupted-variable wird nicht auf true gesetzt.Code :1 2 3 4 5
[...] private Ticker t = new Ticker(1); t.start(); [...] public void keyTyped(KeyEvent e) {t.interrupt();}
ich hoffe, ihr könnt mir helfen.
Gruß, Cymatoxa
-
Die Lösung steckt wir so oft in der Java-Doku: http://cupi2.uniandes.edu.co/site/im...nterrupt%28%29.
Da steht ausdrücklich drinnen, dass wenn sich ein Thread im Block-Status befindet (z.B.: durch Aufruf von sleep) dann wird nicht interrupted, sondern nur eine Interrupted-Exception geworfen.
-
mh okay, danke.
aber wie kann ich dann einen thread abbrechen, ohne gleich zu stop() greifen zu müssen?
-
Indem du beim Abfangen der Interrupted-Exception eine eigene bool-Variable setzt und diese statt isInterrupted verwendest.
-
klar, danke
ich denk zu kompliziert
-
04.08.10 22:17 #6SPiKEe Tutorials.de Gastzugang
wenn ich mit threads arbeite sieht das im allgemeinen immer so aus
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 kannCode java:1 2 3 4 5 6 7 8 9 10 11
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* { [...] } } }
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*
Ähnliche Themen
-
PHP-Session wird nicht beendet
Von Kona im Forum PHPAntworten: 2Letzter Beitrag: 04.11.08, 14:58 -
ProcessBuilder - Prozess wird nicht beendet
Von Ashaman im Forum Java GrundlagenAntworten: 5Letzter Beitrag: 24.09.08, 14:16 -
per shell (vba) gestartete bat wird nicht beendet.
Von C-H im Forum Office-AnwendungenAntworten: 1Letzter Beitrag: 07.04.06, 15:07 -
rundll32.dll wird nicht beendet
Von lukasS im Forum Microsoft WindowsAntworten: 2Letzter Beitrag: 21.06.04, 08:40 -
Thread/Applet wird nicht korrekt beendet
Von joergdeymann im Forum JavaAntworten: 2Letzter Beitrag: 30.05.04, 21:35





Zitieren
Login





