Portal > Foren > Java > Allgemeine Java-Programmierung > Thread-Problem mit wait()
Antwort
 
Themen-Optionen Thema durchsuchen
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
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen 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  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen 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 Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

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

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
PingBacks sind an
RefBacks sind 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 +1. Es ist jetzt 14:55 Uhr.


Powered by vBulletin® Version 3.7.4 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

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 45