如何在java中使用processbuilder将参数传递到jar文件
但它在主线程中抛出一个错误作为异常 java.lang.reflect.InvocationTargetException位于 sun.reflect.NativeMethodAccessorImpl.invoke0Native方法位于 sun.reflect.NativeMethodAccessorImpl.invokeNativeMethodAccessorImpl.java:57 如果我给redirectoutputstream,它不会打印任何东西,它只是在等待打印,退出值为1如何在java中使用processbuilder将参数传递到jar文件,java,runtime,executable-jar,processbuilder,Java,Runtime,Executable Jar,Processbuilder,但它在主线程中抛出一个错误作为异常 java.lang.reflect.InvocationTargetException位于 sun.reflect.NativeMethodAccessorImpl.invoke0Native方法位于 sun.reflect.NativeMethodAccessorImpl.invokeNativeMethodAccessorImpl.java:57 如果我给redirectoutputstream,它不会打印任何东西,它只是在等待打印,退出值为1 我有一个j
我有一个jar文件twittejar,我在命令行中执行为java,-jar,twitie_tag.jar,gate-EN-twitter.model,newfile.txt,>outfile.txt输出将保存在outfile.txt中。如果我给出java、-jar、twitie_tag.jar、gate-EN-twitter.model、newfile.txt,输出将显示在命令窗口中,但我需要使用java程序执行这些命令 在Linux或MacOSX上
ProcessBuilder pb = new ProcessBuilder("java","-jar","twitie_tag.jar","models\\gate-EN-twitter.model", "newfile.txt");
pb.redirectErrorStream(true);
final Process process = pb.start();
InputStream stderr = process.getInputStream();
InputStreamReader isr = new InputStreamReader(stderr);
BufferedReader br = new BufferedReader(isr);
String line = null;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
process.waitFor();
System.out.println("Waiting ...");
System.out.println("Returned Value :" + process.exitValue());
在Windows上使用相同的方法,但使用带有适当参数的cmd.exe
称之为:
private void runProcess(String jarFolder, String command) {
Process pr = null;
try {
pr = Runtime.getRuntime().exec(new String[] {
"/bin/sh",
"-c",
"cd " + jarFolder + " ; " + command
});
} catch (IOException e) {
e.printStackTrace();
}
}
然后,问题是您没有运行Java命令的进程的输出或错误流。
您可能需要使用redirectOutput和redirectError方法重定向进程的输出,以便查看运行jar文件的shell是否有问题。您是否同意。是否启动进程?ProcessBuilder仅累积您希望在其下启动流程的条件,您需要在builder对象上调用.start以实际运行流程,并返回一个流程对象,您可以在该对象上运行.waitforcompletion
请参阅,因为说明中有一个很好的示例。File File=new Fileerrorlog.txt
runProcess(jarFolder,
"java -cp youJarFile packages.MainClass " +
param1 + " " + param2);
感谢大家……谁回答了我的问题Runtime.exec是ProcessBuilder的一大倒退。Vinay你能粘贴完整的代码吗?请检查我在上面粘贴了我的代码。我这么做已经有一段时间了,但我记得我必须使用一个单独的线程来读取这样的输入流。请尝试重定向OutputProcessBuilder.Redirect.INHERIT。谢谢。我使用了redirecterror我知道了这个错误,我使用了redirectoutput作为输出,但它没有显示任何东西。我有一个jar文件twittejar,我在命令行中作为java执行,-jar,twitie_tag.jar,gate-EN-twitter.model,newfile.txt,>outfile.txt输出将保存在outfile.txt中。如果我给出java、-jar、twitie_tag.jar、gate-EN-twitter.model、newfile.txt,输出将显示在命令窗口中,但我需要使用java程序执行这些命令。你能帮助我们吗
runProcess(jarFolder,
"java -cp youJarFile packages.MainClass " +
param1 + " " + param2);
ProcessBuilder pb = new ProcessBuilder("java","-jar","twitie_tag.jar","models//gate-EN-twitter.model", "newfile.txt");
pb.redirectOutput(file);
final Process process = pb.start();
InputStream stderr = process.getInputStream();
InputStreamReader isr = new InputStreamReader(stderr);
BufferedReader br = new BufferedReader(isr);
String line = null;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
process.waitFor();
System.out.println("Waiting ...");
System.out.println("Returned Value :" + process.exitValue());