在Java应用程序中我需要运行外部控制台应用程序。窗口的一切都很好:
try {
System.out.println("Running...");
Runtime.getRuntime().exec("notepad.exe");
System.out.println("End.");
}
catch(Exception e) {
System.out.println(e.getMessage());
}
成功启动记事本。
但是,如果我将D:\\MyProg.exe
或.bat
或甚至cmd.exe
(它是PATH作为记事本),它就不起作用。没有任何exeptions。只是:
Running...
End.
答案 0 :(得分:3)
首先,很可能Runtime.exec()
异步返回,所以只打印“end”将始终有效,因为exec调用立即返回,这就是你所看到的。
还有很多其他问题可以在这里出现。我认为正在发生的事情是你正在调用的程序可能正在输出你无法读取的stdout上的I / O,或者在退出java进程之前你可能需要wait for it to finish。关于Runtime.exec()
你可能应该阅读的各种问题有一个great article,它涵盖了这个和其他问题。
答案 1 :(得分:-1)
这是因为记事本放在特殊文件夹中,此文件夹存在于Path
变量中。
使用以下行运行cmd
:
Runtime.getRuntime().exec("cmd.exe /c start");
运行其他应用程序:
Runtime.getRuntime().exec("cmd.exe /c start C:\\path\\to\\app.exe");