日期:2014-05-20  浏览次数:20844 次

求教:Runtime.getRuntime().exec() 调用程序 问题
public static void main(String[] args) {
try {
String line;
Process p = Runtime.getRuntime().exec("calc.exe");
BufferedReader input = new BufferedReader(new InputStreamReader(p
.getInputStream()));
line = input.readLine();
input.close();
} catch (Exception err) {
err.printStackTrace();
}
}

执行这段程序可以打开系统的计数器,但是 打开计算器以后,这个main方法没有结束,程序还是始终的运行状态(eclipse控制台的小红灯一直是亮的),只有当关闭了计算器以后,main方法才能结束(eclipse控制台的小红灯才熄灭)。
我想问,如何做,能够实现,调用这个方法后,启动了计算器。但启动计算器以后,在不关闭计算器的情况下,退出main方法,结束这个程序,而计算机还是打开状态
(我在程序里添加了System.exit(0),也不好使,程序不结束,始终在等待关闭计算机以后,才结束)

谢谢了~~~~~

-----

另问:如果执行一个 bat 程序,不写 line = input.readLine(); 这句话,bat 就不执行,只有写了这句才执行(bat的内容是启动tomcat),请问,这又是什么原因啊????

------解决方案--------------------
就算重新启动一个线程,你用System.exit的话,要么就是关不掉,要么就是calc根本就不启动。
我觉得System是否exit不重要吧,如果不想看到那个黑框的话,start javaw就行了嘛。
至于readLine,我觉得可能和jre版本有关系,反正在我这里,不存在你说的这个问题。
------解决方案--------------------
你调用的计算器程序,我觉得无论如何是不能够让JVM开启了新的进程之后再关闭JVM的。
JVM有相关的类对象来监听和维护新开启的进程,如果JVM关闭,新的进程会被关联关闭,至少calc是这样的。
可以确定的是,即便开启一个线程,也不能做到这样的效果。
------解决方案--------------------
Java code
public static void main(final String[] args) throws java.io.IOException {
    java.awt.Desktop.getDesktop().open(new java.io.File("/opt/local/bin/sqlitestudio"));
}