如何在java中使用processbuilder将参数传递到jar文件

如何在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

但它在主线程中抛出一个错误作为异常

java.lang.reflect.InvocationTargetException位于 sun.reflect.NativeMethodAccessorImpl.invoke0Native方法位于 sun.reflect.NativeMethodAccessorImpl.invokeNativeMethodAccessorImpl.java:57

如果我给redirectoutputstream,它不会打印任何东西,它只是在等待打印,退出值为1


我有一个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());