Re: Thread.wait()
"R. Vince" <rvince99 a t hotmail d o t com> wrote in message
news:46700b9b$0$4721$4c368faf@roadrunner.com...
| I'm struggling getting my head around this for some reason today. I'm not
| referring to things correctly i n my code, with respect to the threads --
I
| must be misunderstanding you Gordon, because I am getting and
| IllegalMonitorStateException when I call notify on the runnable, from,
what
| I believe, is the class that owns the Runnable, yes? I've pared down the
| code here, but you can see what is going on. What am I missing? The thread
| calling the notify IS the Event Dispatch thread, isn;t it? If not, how do
I
| obtain it from where I am at below? Thanks again -- I'm just dizzy from
this
| or something! -Ralph
|
| Exception in thread "AWT-EventQueue-0"
| java.lang.IllegalMonitorStateException: current thread not owner
| at java.lang.Object.notify(Native Method)
| at
|
robot.server.core.responder.SmartResponder.getGoBack(SmartResponder.java:411)
|
| public class SmartResponder {
| public Runnable studyinteractive;
| ...
| public void doResponseStudy() {
| studyinteractive = new Runnable(){
| public void run(){
| study();
| };
| };
| javax.swing.SwingUtilities.invokeLater(studyinteractive);
| }
| public void study(){
| ...
| try{
| synchronized(this) {
| while(getGoBack())
| wait();
| }
| }catch(InterruptedException interruptedexception) { }
| }
| public boolean getGoBack(){ //pared down here, b is actually a long
| conditional, not merely what is shown
| boolean b= arrayList.size()>0;
| if(!b )
| studyinteractive.notify(); //// <-----------line 411
| return b;
Just like wait(), you must own the monitor before you can invoke notify().
You need to wrap this fragment with synchronized. You are also using 2
different monitors--the wait is on "this" SmartResponder while the notify is
on studyInteractive Runnable. You must use the same object for both.
Matt Humphrey matth@ivizNOSPAM.com http://www.iviz.com/