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

如何从Java代码运行不同的命令?,java,swing,jakarta-ee,javafx-2,Java,Swing,Jakarta Ee,Javafx 2,我想运行不同的命令,这些命令可以通过Java在命令提示符或终端上执行 我确实搜索了几个地方,但没有得到适当的答复 我想运行一个在VISAGE_HOME环境中设置的编译器,并运行GRADLE以完成所有构建任务 我想从Java程序中调用所有这些命令 由于它是一个swing应用程序,我希望在单击按钮或其他事件时调用这些命令 我的问题是,我无法编程:( 我也不知道有哪种API可以做到这一点。我看过一些示例代码,但大多数示例代码都与执行shell命令或命令提示符命令的示例代码相同。没有人教我做上述工作。类

我想运行不同的命令,这些命令可以通过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焦点)
其次,您需要使用查找指定环境变量的值,并自己替换它

注意:感谢Guillaume Polet指出
进程
将自动包含
路径
环境变量以查找命令

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

执行外部命令本质上是阻塞操作,而不是显式的,考虑到需要消耗进程的输出或想要了解进程终止,这些操作将要求您执行某种阻塞操作。不要在EDT上执行此操作。这将导致您的程序看起来好像挂起了

首先,你的朋友

你可以看看,

  • (Linux焦点)
其次,您需要使用查找指定环境变量的值,并自己替换它

注意:感谢Guillaume Polet指出
进程
将自动包含
路径
环境变量以查找命令

另外,请记住,不要在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