Exception bei Button mit wait() und notifyAll()

Diskutiere Exception bei Button mit wait() und notifyAll() im Java Basics - Anfänger-Themen Bereich.
I

Itz_Marlon

Hi,

ich habe eine for-Schleife implementiert und an das Ende dieser folgendes gesetzt:

Java:
buttonEnde.setEnabled(true);
                try {
                    wait();
                } catch (InterruptedException e) {
                    Thread.currentThread().interrupt();
                    e.printStackTrace();
                }
Der Button sieht so aus:

Java:
buttonEnde.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                notifyAll();
            }
        });
Der Haupt Thread schläft auch gut ein, wenn ich allerdings auf den Button Klicke bekomme ich folgende Exception:

Exception in thread "AWT-EventQueue-0" java.lang.IllegalMonitorStateException
at java.lang.Object.notifyAll(Native Method)
at Spiel$1.actionPerformed(Spiel.java:102)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

Kann mir da jemand helfen?
 
H

httpdigest

Schau dir mal das synchronized-Schlüsselwort an. Übrigens war es für den Aufruf von wait() auch notwendig, einen Lock auf das Objekt zu haben.
Beim zweiten Blick auf deinen Code, rufst du ja notifyAll() auf dem impliziten `this` Objekt auf, welches in diesem lexikalischen Kontext deine ActionListener-Instanz ist. Ich glaube nicht, dass du notifyAll() auf diesem ActionListener aufrufen wolltest, sondern auf dem Objekt, auf welchem du vorher wait() aufgerufen hattest, also auf dem Objekt, welches in diesem Kontext `this` war:
Java:
buttonEnde.setEnabled(true);
try {
  wait(); // <- äquivalent zu this.wait();
} catch (InterruptedException e) {
  Thread.currentThread().interrupt();
  e.printStackTrace();
}
 
Thema: 

Exception bei Button mit wait() und notifyAll()

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben