我只是在研究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);
}