如何从Java代码运行不同的命令?

时间:2012-10-03 20:12:17

标签: java swing java-ee javafx-2

我想运行不同的命令,这些命令可以在我的命令提示符或终端上通过Java执行。

我搜索了一些地方,但没有得到适当的回复。

我想运行一个在环境中设置为VISAGE_HOME的编译器,并运行GRADLE以执行所有构建任务。

我想从Java程序中调用所有这些命令。

由于它是一个swing应用程序,我想在点击按钮或其他一些事件时调用这些命令。

我的问题是我无法编程:(。

我也不知道可以执行此操作的API。我浏览了一些示例代码,但大多数代码都有相同类型的代码来执行shell命令或命令提示符命令。没有人告诉我做上述事情。

5 个答案:

答案 0 :(得分:2)

看看ProcessBuilder。它返回的Process对象有一个waitFor方法,因此您可以等待该过程完成。然后你就可以开始下一个过程了。

例如

Process p = new ProcessBuilder("runYourCommand").start();
InputStream in = process.getInputStream();
InputStreamReader inr = new InputStreamReader(in);
BufferedReader br = new BufferedReader(inr);
String inputLine;
while ((inputLine = br.readLine()) != null) {
  System.out.println(inputLine);
}
p.waitFor();

ProcessBuilder上另一个有趣的方法是environment()。这将返回您可以访问的环境变量。来自API文档

Map<String, String> env = pb.environment();  
env.put("VAR1", "myValue");

答案 1 :(得分:1)

这样的事情:

String cmd = "gedit";

Runtime run = Runtime.getRuntime();

Process pr = run.exec(cmd);

答案 2 :(得分:1)

首先,ProcessBuilder是你的朋友......

你可以看看;

其次,您需要使用System.getenv来查找指定环境变量的值并自行替换它。

nb:感谢Guillaume Polet指出Process会自动包含path环境变量来查找命令。

另外,请记住,不要在美国东部时间执行任何阻止程序。

执行外部命令本质上是阻塞操作,虽然没有明确,考虑到需要使用进程的输出或想知道进程终止,这些都需要您执行某种阻塞操作。不要在EDT上这样做。它会使你的程序看起来像是挂起的。

答案 3 :(得分:0)

您可以使用Runtime.exec方法从Java中运行命令。系统环境变量通常在jvm中不可见。您可以使用启动器,将这些系统环境属性作为jvm属性提交给您的Java应用程序。

答案 4 :(得分:0)

根据http://javarevisited.blogspot.de/2011/02/how-to-execute-native-shell-commands.html在包含“java.lang.Runtime”之后在代码中实现以下内容应该完全有效:

try {

Process process = Runtime.getRuntime().exec("Command to be executed");

} catch (Exception e) {

e.printStackTrace(System.err);

}