猿问
下载APP

从Java执行另一个应用程序

从Java执行另一个应用程序

我需要执行一个执行另一个Java应用程序的批处理文件。我不关心它是否成功执行,我不必捕获任何错误。

是否可以使用ProcessBuilder执行此操作?如果我没有捕获错误会有什么后果?

但是,我的要求只是执行另一个Java应用程序。


波斯汪
浏览 31回答 3
3回答

守着一只汪

这种Runtime.getRuntime().exec()方法很麻烦,你很快就会发现。看看Apache Commons Exec项目。它抽象了许多与使用Runtime.getRuntime().exec()和ProcessBuilderAPI 相关的常见问题。它很简单:String line = "myCommand.exe";CommandLine commandLine = CommandLine.parse(line);DefaultExecutor executor = new DefaultExecutor();executor.setExitValue(1);int exitValue = executor.execute(commandLine);

侃侃尔雅

是的,可以使用ProcessBuilder。ProcessBuilder示例:import&nbsp;java.io.*;import&nbsp;java.util.*;public&nbsp;class&nbsp;CmdProcessBuilder&nbsp;{ &nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;main(String&nbsp;args[])&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throws&nbsp;InterruptedException,IOException&nbsp; &nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;List<String>&nbsp;command&nbsp;=&nbsp;new&nbsp;ArrayList<String>(); &nbsp;&nbsp;&nbsp;&nbsp;command.add(args[0]); &nbsp;&nbsp;&nbsp;&nbsp;ProcessBuilder&nbsp;builder&nbsp;=&nbsp;new&nbsp;ProcessBuilder(command); &nbsp;&nbsp;&nbsp;&nbsp;Map<String,&nbsp;String>&nbsp;environ&nbsp;=&nbsp;builder.environment(); &nbsp;&nbsp;&nbsp;&nbsp;final&nbsp;Process&nbsp;process&nbsp;=&nbsp;builder.start(); &nbsp;&nbsp;&nbsp;&nbsp;InputStream&nbsp;is&nbsp;=&nbsp;process.getInputStream(); &nbsp;&nbsp;&nbsp;&nbsp;InputStreamReader&nbsp;isr&nbsp;=&nbsp;new&nbsp;InputStreamReader(is); &nbsp;&nbsp;&nbsp;&nbsp;BufferedReader&nbsp;br&nbsp;=&nbsp;new&nbsp;BufferedReader(isr); &nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;line; &nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;((line&nbsp;=&nbsp;br.readLine())&nbsp;!=&nbsp;null)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(line); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;System.out.println("Program&nbsp;terminated!"); &nbsp;&nbsp;}}检查以下示例:http://www.rgagnon.com/javadetails/java-0014.htmlhttp://www.java-tips.org/java-se-tips/java.util/from-runtime.exec-to-processbuilder.html

HUH函数

我假设您知道如何使用ProcessBuilder。执行命令。从Java执行命令总是应该从进程中读取stdout和stderr流。否则,可能会发生缓冲区已满并且因为写入stdout或stderr块而无法继续进程。
打开App,查看更多内容
随时随地看视频慕课网APP
我要回答