如何从Java代码运行不同的命令?
我想运行不同的命令,这些命令可以通过Java在命令提示符或终端上执行 我确实搜索了几个地方,但没有得到适当的答复 我想运行一个在VISAGE_HOME环境中设置的编译器,并运行GRADLE以完成所有构建任务 我想从Java程序中调用所有这些命令 由于它是一个swing应用程序,我希望在单击按钮或其他事件时调用这些命令 我的问题是,我无法编程:( 我也不知道有哪种API可以做到这一点。我看过一些示例代码,但大多数示例代码都与执行shell命令或命令提示符命令的示例代码相同。没有人教我做上述工作。类似的内容:如何从Java代码运行不同的命令?,java,swing,jakarta-ee,javafx-2,Java,Swing,Jakarta Ee,Javafx 2,我想运行不同的命令,这些命令可以通过Java在命令提示符或终端上执行 我确实搜索了几个地方,但没有得到适当的答复 我想运行一个在VISAGE_HOME环境中设置的编译器,并运行GRADLE以完成所有构建任务 我想从Java程序中调用所有这些命令 由于它是一个swing应用程序,我希望在单击按钮或其他事件时调用这些命令 我的问题是,我无法编程:( 我也不知道有哪种API可以做到这一点。我看过一些示例代码,但大多数示例代码都与执行shell命令或命令提示符命令的示例代码相同。没有人教我做上述工作。类
String cmd = "gedit";
Runtime run = Runtime.getRuntime();
Process pr = run.exec(cmd);
大概是这样的:
String cmd = "gedit";
Runtime run = Runtime.getRuntime();
Process pr = run.exec(cmd);
看一看。它返回的流程对象有一个方法,因此您可以等待流程完成。然后您可以开始下一个流程
比如说
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上另一个有趣的方法是()。它将返回您可以从API文档访问的环境变量
Map<String, String> env = pb.environment();
env.put("VAR1", "myValue");
Map env=pb.environment();
环境看跌期权(“VAR1”、“myValue”);
看一看。它返回的流程对象有一个方法,因此您可以等待流程完成。然后您可以开始下一个流程
比如说
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上另一个有趣的方法是()。它将返回您可以从API文档访问的环境变量
Map<String, String> env = pb.environment();
env.put("VAR1", "myValue");
Map env=pb.environment();
环境看跌期权(“VAR1”、“myValue”);
您可以使用这些方法从Java中运行命令。系统环境变量通常在jvm中不可见。您可以使用启动器,将这些系统环境属性作为jvm属性提交给Java应用程序。您可以使用这些方法从Java中运行命令。系统环境nt变量通常在jvm中不可见。您可以使用启动器,将这些系统环境属性作为jvm属性提交给java应用程序。首先,您的朋友是
你可以看看,
- (Linux焦点)
进程
将自动包含路径
环境变量以查找命令
另外,请记住,不要在EDT上执行任何阻塞过程
执行外部命令本质上是阻塞操作,而不是显式的,考虑到需要消耗进程的输出或想要了解进程终止,这些操作将要求您执行某种阻塞操作。不要在EDT上执行此操作。这将导致您的程序看起来好像挂起了 首先,你的朋友
你可以看看,
- (Linux焦点)
进程
将自动包含路径
环境变量以查找命令
另外,请记住,不要在EDT上执行任何阻塞过程
执行外部命令本质上是阻塞操作,而不是显式的,考虑到需要消耗进程的输出或想要了解进程终止,这些操作将要求您执行某种阻塞操作。不要在EDT上执行此操作。这将导致您的程序看起来好像挂起了 根据在包含“java.lang.Runtime”之后在代码中实现以下内容,应该可以完美地工作:
试试{
processprocess=Runtime.getRuntime().exec(“要执行的命令”);
}捕获(异常e){
e.printStackTrace(System.err);
}
根据在包含“java.lang.Runtime”之后在代码中实现以下内容,应该可以完美地工作:
试试{
processprocess=Runtime.getRuntime().exec(“要执行的命令”);
}捕获(异常e){
e.printStackTrace(System.err);
}
好的。那么这能帮助我调用与gradle或任何其他东西相关的其他任务吗?如果你能从命令行运行它,你可以通过ProcessBuilder
运行它。你需要考虑到你将需要使用流程的“输出”(你可能想知道这个)因为某些进程将出现“挂起”如果您在尝试进行系统调用时没有注意事项,但是外部的可执行程序不应该是一个问题。根据您的2第一个链接,环境变量由通常包含路径的JVM继承。@MadProgrammer根据您的说法,几乎不需要执行“路径搜索”这就是我到目前为止所经历的。好的。那么这能帮助我调用与gradle或任何其他东西相关的其他任务吗?如果你能从命令行运行它,你可以通过ProcessBuilder
运行它。你需要考虑到你将需要使用进程的“输出”(您可能随时都想知道这一点),因为某些进程将显示为“挂起”如果您在尝试进行系统调用时没有注意事项,但外部可执行程序不应成为问题。根据您的2第一个链接,环境变量由JVM中通常包含PATH的JVM继承。@madafaik