我只是在研究Java的Runtime和Process类。我试图使用Runtime.exec()打开类似Windows word的应用程序,然后等待一段时间,然后尝试使用Process.destroy()方法销毁它。
 MS Word正在打开,但没有关闭,它在控制台中抛出异常以下

exception::java.lang.IllegalMonitorStateException: current thread not owner


下面是我的代码

 import java.util.*;

public class StringTesting {

    public void open()
    {

        try{
        Runtime runtime = Runtime.getRuntime();

        Process proc =runtime.exec("C:\\Program Files\\Microsoft Office\\Office12\\winword.exe");

        StringTesting st = new StringTesting();

        st.wait(5000);

        // now destroy the process

         proc.destroy();
         System.out.println("  after destroy");
        }
        catch(Exception e)
        {
            System.out.println(" exception::"+e);
        }
    }

    public static void main(String a[])
    {
        StringTesting st = new StringTesting();
          st.open();
    }

}

最佳答案

这里的问题是,如果不保存该对象的监视器,就无法调用Object.wait()

StringTesting st = new StringTesting();
synchronized (st) {
    st.wait(5000);
}

09-27 01:39