Impressum · Kontakt · Hilfe
Besucher online · Mitglieder



Portal > Foren > Java > Allgemeine Java-Programmierung > Thread-Problem mit wait()
Antwort
 
Themen-Optionen
Alt 15.12.2005, 14:37   Nach oben    #1
eyeless
Gast
 
Beiträge: n/a
Standard Thread-Problem mit wait()

Hallo,

ich habe mir einen Thread abgeleitet und will diesen nun unter anderem mittels wait() und notify() einfrieren und wiederbeleben, damit nicht zuviel Leistung verpulvert wird (als wenn ich den Thread mit einer while-Schleife "pausiere"

Code:
public class NewJFrame extends javax.swing.JFrame {
    
    public NewJFrame() {
        initComponents();
    }
                              
    private void initComponents() {
        ...
	//Hier werden halt die ganen Componenten erstellt, die ActionListener zugewiesen, usw.
	...
        pack();
    }                       

    private void jButton2MouseClicked(java.awt.event.MouseEvent evt) {                                      
        //if(MyT.paused)
         //   MyT.notify();
        MyT.pause();
    }                                     

    private void jButton3MouseClicked(java.awt.event.MouseEvent evt) {                                      
        MyT.interrupt();
    }                                     

    private void jButton1MouseClicked(java.awt.event.MouseEvent evt) {                                      
        MyT = new myThread();
        MyT.start();
    }                                     
    
   
    
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new NewJFrame().setVisible(true);
            }
        });
    }
                     
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JButton jButton3;
    private javax.swing.JLabel jLabel1;
                 
    private myThread MyT;
    
    class myThread extends Thread
    {
        public boolean paused = false;
        
        public void run() {
            while(isInterrupted()==false) {
                if(paused) {
                    jLabel1.setText("paused ...");
                    try { 
                     wait();     
                    } catch(InterruptedException e) { }
                }
                else
                    jLabel1.setText("running ...");    
            }
            jLabel1.setText("stopped");
        }  
        
        public void pause() {
         paused = !paused;    
        }
        
    }
}
Fehlermeldung:

Exception in thread "Thread-2" java.lang.IllegalMonitorStateException: current thread not owner
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:474)
at frames.NewJFrame$myThread.run(NewJFrame.java:139)

Was mahce ich falsch?

mfg, eyeless
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 15.12.2005, 22:22   Nach oben    #2
Neuer Benutzer
 
Registriert seit: 14.10.2004
Beiträge: 25
Standard

Hallo,
du brauchst den Monitor von dem Objekt, auf dem du wait oder notify aufrufst.
Das bedeutet, du musst einen synchronized-Block um den Teil machen, in dem du wait oder notify aufrufst. Also in deinem Thread:
Code:
synchronized(this){
    wait();
}
und von außen:
Code:
synchronized(MyT){
    MyT.notify();
}
Mit synchronized über das selbe Objekt geschützte Blöcke können immer nur von einem Thread gleichzeitig betreten werden. Also in dem Beispiel oben würde das bedeuten, dass solange der myThread in dem Block ist der über this synchronisiert, der Thread des NewJFrame-Objektes nicht in den synchronized block kommt der über MyT synchronisiert (da beide Threads über das selbe Objekt synchronisieren).

Gruß,
Max
Böreck ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.
Trackbacks are An
Pingbacks are An
Refbacks are Aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Thread mehrfach starten jack77 Desktop-Applikationen und Grafik 18 07.03.2007 17:44
Scheduler mit wait und notify Ybbus Allgemeine Java-Programmierung 5 22.11.2005 10:24
Thread implementierungs Problem materthron Allgemeine Java-Programmierung 2 19.08.2005 02:21
Problem bei Thread für mp3 player Eddi Allgemeine Java-Programmierung 6 30.01.2005 16:18
Thread problem JoeBloggs Allgemeine Java-Programmierung 2 23.11.2004 09:36


Alle Zeitangaben in WEZ +2. Es ist jetzt 08:09 Uhr.

Nach oben
Wir nutzen das Zend Framework, vBulletin (vBulletin v3.7.3, Copyright ©2000-2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0) und vBSEO.

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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44