如题,这个问题困扰了我一下午了。
在网上也找了许多解决办法,多是说起两个线程把InputStream和ErrorStream缓存清空。
我把代码也拷过去试了,还是不行。我就是简单的调用exec("notepad")或exec("cmd /c notepad"),然后启用线程读取InputStream和ErrorStream。
但是程序还是不能退出,直到把记事本关闭了程序才结束。希望高手指点下。
在网上也找了许多解决办法,多是说起两个线程把InputStream和ErrorStream缓存清空。
我把代码也拷过去试了,还是不行。我就是简单的调用exec("notepad")或exec("cmd /c notepad"),然后启用线程读取InputStream和ErrorStream。
但是程序还是不能退出,直到把记事本关闭了程序才结束。希望高手指点下。
// Process p = new ProcessBuilder(...).start();
// do somethingp.destroy(); // kill this process
但是程序还是不能退出,直到把记事本关闭了程序才结束。process.getInputStream() 获得的也是输出到控制台的io流吧。
记事本是你打开的,当然要关了记事本才能退出程序的吧。楼主想干什么
到底是希望达到关闭exe后才退出Java
还是希望不关闭exe就退出Java?
* @param args
*/
public static void main(String[] args){
// TODO Auto-generated method stub
Runtime rt = Runtime.getRuntime();
;
try {
Process p = rt.exec("cmd /c notepad");
Thread.sleep(1000); // 打开程序的时间
p.destroy(); //程序打开后将cmd关闭
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
}
}
process.waitFor();会一直等待直到“启动成功”~~
这位兄弟的方法不行啊,Process p = Runtime.getRuntime().exec(...);这一步执行后就挂在那了
* @param args
*/
public static void main(String[] args){
// TODO Auto-generated method stub
Runtime rt = Runtime.getRuntime();
;
try {
Process p = rt.exec("cmd /c notepad");
Thread.sleep(1000); // 打开程序的时间
p.destroy(); //程序打开后将cmd关闭
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
}
}
我说的记事本只是一个例子,用这段代码打开记事本是没有问题,如果是打开QQ的话,我试了下是不能打开QQ。