2016-06-25 141 views
1

我不确定如何启动外部应用程序(特定于Windows)至Java代码。我不打算使用这个Java代码Mac/Linux,所以我们来关注Windows代码。Java - 执行外部Windows应用程序?

我已经完成

我一直在研究这个问题,在过去的两天,我还没有找到答案。我很容易找到Runtime.getRuntime().exec()的方法,但事情是我无法找到从我的本地工作区启动一个批处理(.bat)文件IntelliJ Idea

就是我要问

我只是想知道如何在我的工作区执行本地批处理文件(在像com.example.batch的文件夹)和/或如何执行文件(.exe)或(.bat)与直接文件地址。 (例如,碎片整理和优化驱动文件(.exe)的的WindowsC:\WINDOWS\system32\dfrgui.exe

感谢所有提前,我一直渴望着这个答案。

+0

你有没有尝试类似[这个问题]的答案(http://stackoverflow.com/questions/615948/how-do-i-run-a-batch-file-from-my-java-application) ? –

回答

1

你看过必备的Runtime.exec() article吗?

本文的第2页列出了一个常见的错误:Runtime.exec()不是命令行

.bat文件不可执行文件。它们是指令的集合。像Linux中的shell脚本一样,您需要一些实际执行这些指令的东西。

你在这种情况下可执行文件是cmd.exe,这将需要/Ccom.example.batch作为参数:

Runtime.getRuntime().exec(new String[] { "cmd.exe", "/C", "com.example.batch"}); 

作为一个侧面说明,检查出ProcessBuilder类。它比Runtime好得多。是的,Runtime文章中的所有规则适用于ProcessBuilder

+0

很好的答案。我选择它是因为你专注于一个你完整详细描述的主题。谢谢! – VenHayz

2

首先,您应该使用ProcessBuilder来执行外部程序,以获得比Runtime.getRuntime().exec()更易于使用的界面。

其次,要执行.bat文件,您只需执行cmd.exe并在/C选项中传递批处理文件名。请注意,当您运行一个批处理文件时,您正在启动一个DOS cmd处理器并告诉它运行批处理文件,而不是从终端读取。因此,批处理文件必须位于cmd.exe可访问的位置。因此它不能位于包含Java程序的jar文件中。如果有必要将它分发到jar中,你将不得不将它复制到某个地方的文件系统。

+0

(关于第二个选项)是否允许我从项目工作区启动.bat? – VenHayz

+0

请参阅我编辑的答案。 –