Java 线程中的IllegalMonitorStateException

Java 线程中的IllegalMonitorStateException,java,wait,synchronized,Java,Wait,Synchronized,我想使用同步的矢量运行线程 我尝试了两种方法,一种是等待,另一种是等待 我想从静态类调用notify方法 这是我的线程代码: import java.io.IOException; import java.io.PrintWriter; import java.util.Scanner; import java.util.Vector; public class TSend extends Thread { Vector<String> File_Message=ne

我想使用同步的矢量运行线程

我尝试了两种方法,一种是等待,另一种是等待

我想从静态类调用notify方法 这是我的线程代码:

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;
import java.util.Vector;


public class TSend extends Thread {

     Vector<String> File_Message=new Vector<String>();


        public void save_out_putMessage(String out_Msg){

             synchronized(this.File_Message){
       this.File_Message.add(out_Msg);
       this.File_Message.notify();

        }

        }


public synchronized String GetMessage() throws InterruptedException{
        String message;
        while(File_Message.size()==0){
            this.File_Message.wait();
        }

         message = File_Message.get(0);
        File_Message.removeElementAt(0);
        return message;
}


public  synchronized void Recepteur_de_Message (String message){

    /*
     * Pour savgarde tout les message des client dans un vecteur Message . 
     * 
      */
    File_Message.add(message);

    notify();

}


@Override
public void run(){
    try{
          String Message ;
          while(true){
                str =GetMessage();  
          }
    }catch(Exception e){
          e.printStackTrace();
    }
但我有一个例外,我想逃跑

java.lang.IllegalMonitorStateException
    at java.lang.Object.wait(Native Method)
    at java.lang.Object.wait(Object.java:485)
    at TSend.GetMessage(TSend.java:39)
    at TSend.run(TSend.java:78)
你在打电话吗

this.File_Message.wait();
在某个线程中,该线程不拥有引用对象上的监视器。您可以通过
synchronized
方法执行此操作。在
synchronized
方法中,监视器在
对象上获取

我不清楚为什么要在该对象上调用
wait()
,但如果要这样做,您需要在该点拥有它的监视器

检查和的javadoc

this.File_Message.wait();