我想运行不同的命令,这些命令可以在我的命令提示符或终端上通过Java执行。
我搜索了一些地方,但没有得到适当的回复。
我想运行一个在环境中设置为VISAGE_HOME的编译器,并运行GRADLE以执行所有构建任务。
我想从Java程序中调用所有这些命令。
由于它是一个swing应用程序,我想在点击按钮或其他一些事件时调用这些命令。
我的问题是我无法编程:(。
我也不知道可以执行此操作的API。我浏览了一些示例代码,但大多数代码都有相同类型的代码来执行shell命令或命令提示符命令。没有人告诉我做上述事情。
答案 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);
}