0

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

我确实搜索了几个地方,但没有得到适当的答复。

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

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

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

我的问题是我无法对此进行编程:(。

我也不知道有什么 API 可以做到这一点。我浏览了一些示例代码,但其中大多数都有执行 shell 命令或命令提示符命令的相同示例代码。没有人告诉我做上述事情。

4

5 回答 5

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");
于 2012-10-03T20:17:49.127 回答
1

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

你可以看看;

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

注意:感谢 Guillaume Polet 指出Process将自动包含path环境变量以查找命令。

另外,请记住,不要在 EDT 上执行任何阻塞过程。

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

于 2012-10-03T20:20:30.133 回答
1

像这样的东西:

String cmd = "gedit";

Runtime run = Runtime.getRuntime();

Process pr = run.exec(cmd);
于 2012-10-03T20:17:02.807 回答
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);

}

于 2012-10-03T20:21:23.153 回答
0

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

于 2012-10-03T20:18:42.240 回答