如何从另一个java程序中运行.jar文件?
我有一个.jar文件,可以在命令行上运行:如何从另一个java程序中运行.jar文件?,java,Java,我有一个.jar文件,可以在命令行上运行: java -jar myFile.jar argument1 我想将这个.jar的输出保存为另一个java程序中的字符串变量 我怎么做 我尝试在程序中包含myFile.jar作为引用,并在程序中执行myFile.main(新字符串{“argument1”})。但这只是将结果打印到控制台,我不能在我的程序中使用结果 希望这不会太混乱。作为一个Jar文件,您可以将其添加到类路径中,并自行调用程序的功能。您可能需要更多地了解Jar背后的逻辑,以便在不让它输
java -jar myFile.jar argument1
我想将这个.jar的输出保存为另一个java程序中的字符串变量
我怎么做
我尝试在程序中包含myFile.jar作为引用,并在程序中执行myFile.main(新字符串{“argument1”})
。但这只是将结果打印到控制台,我不能在我的程序中使用结果
希望这不会太混乱。作为一个Jar文件,您可以将其添加到类路径中,并自行调用程序的功能。您可能需要更多地了解Jar背后的逻辑,以便在不让它输出信息的情况下使用它 我相信您正在寻找的是如何shell执行Jar归档。例如可以I 运行Jar文件需要将Jar文件包含在类路径中。这可以在运行时使用
URLClassLoader
完成。只需构造一个URLClassLoader
,将jar作为URL之一。然后调用它的forClass(…)
如果你知道类名(当然是全名)。或使用其“findResources(字符串名称)”检查清单文件
一旦获得该类,就可以使用反射来获取其静态方法main
再次看到您的问题,您知道类名,因此如果您确定jar文件已经在类路径中,那么您可以在尝试时调用它
二,
要捕获输出,可以调用System.setOut(PrintStream out)
和System.setErrPrintStream out)
来更改打印流。您可以传递创建的打印流。像这样:
ByteArrayOutputStream BAOS = new ByteArrayOutputStream();
PrintStream MyOut = new PrintStream(BAOS);
System.setOut(MyOut);
// Do something to have something printed out.
...
String TheCaptured = new String(BAOS.toByteArray());
希望这能有所帮助。看看ProcessBuilder: 它有效地创建了一个操作系统进程,然后您可以使用以下方法捕获输出:
process.getInputStream()
该行:
processbuilder.redirectErrorStream(true)
将在以下示例中合并输出流和错误流:
e、 g
如果你不能包括另一个罐子 你可以用这样的东西
Runtime re = Runtime.getRuntime();
BufferedReader output;
try{
cmd = re.exec("java -jar MyFile.jar" + argument);
output = new BufferedReader(new InputStreamReader(cmd.getInputStream()));
} catch (IOException ioe){
ioe.printStackTrace();
}
String resultOutput = output.readLine();
我知道我的代码并不完美,比如捕捉异常等等,但我认为这可以给你一个好主意
Runtime re = Runtime.getRuntime();
BufferedReader output;
try{
cmd = re.exec("java -jar MyFile.jar" + argument);
output = new BufferedReader(new InputStreamReader(cmd.getInputStream()));
} catch (IOException ioe){
ioe.printStackTrace();
}
String resultOutput = output.readLine();