tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
5
ZUGRIFFE
378
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Cymatoxa Cymatoxa ist offline Mitglied Silber
    Registriert seit
    Jul 2010
    Beiträge
    67
    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 :
    1
    
    java.lang.InterruptedException: sleep interrupted
    hier der quelltext:
    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);
            }
        }
    }
    Code :
    1
    2
    3
    4
    5
    
        [...]
        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
     

  2. #2
    Steiner_B Steiner_B ist offline Mitglied Platin
    Registriert seit
    Mar 2004
    Ort
    Wien
    Beiträge
    573
    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.
     

  3. #3
    Cymatoxa Cymatoxa ist offline Mitglied Silber
    Registriert seit
    Jul 2010
    Beiträge
    67
    mh okay, danke.
    aber wie kann ich dann einen thread abbrechen, ohne gleich zu stop() greifen zu müssen?
     

  4. #4
    Steiner_B Steiner_B ist offline Mitglied Platin
    Registriert seit
    Mar 2004
    Ort
    Wien
    Beiträge
    573
    Indem du beim Abfangen der Interrupted-Exception eine eigene bool-Variable setzt und diese statt isInterrupted verwendest.
     

  5. #5
    Cymatoxa Cymatoxa ist offline Mitglied Silber
    Registriert seit
    Jul 2010
    Beiträge
    67
    klar, danke
    ich denk zu kompliziert
     

  6. #6
    SPiKEe Tutorials.de Gastzugang
    wenn ich mit threads arbeite sieht das im allgemeinen immer so aus
    Code 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*
    {
    [...]
    }
    }
    }
    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*
     

Ähnliche Themen

  1. PHP-Session wird nicht beendet
    Von Kona im Forum PHP
    Antworten: 2
    Letzter Beitrag: 04.11.08, 14:58
  2. ProcessBuilder - Prozess wird nicht beendet
    Von Ashaman im Forum Java Grundlagen
    Antworten: 5
    Letzter Beitrag: 24.09.08, 14:16
  3. per shell (vba) gestartete bat wird nicht beendet.
    Von C-H im Forum Office-Anwendungen
    Antworten: 1
    Letzter Beitrag: 07.04.06, 15:07
  4. rundll32.dll wird nicht beendet
    Von lukasS im Forum Microsoft Windows
    Antworten: 2
    Letzter Beitrag: 21.06.04, 08:40
  5. Thread/Applet wird nicht korrekt beendet
    Von joergdeymann im Forum Java
    Antworten: 2
    Letzter Beitrag: 30.05.04, 21:35

Stichworte