错误:启动流程生成器命令时无法访问jarfile

时间:2019-09-26 10:01:00

标签: java executable-jar processbuilder

我用Java将一个主程序构建到jar文件中,而我想执行另一个程序。第二个程序也是一个jarfile。

要执行第二个程序,我使用一个流程生成器使用这些参数来执行第二个jarfile。但是我没有工作,却收到以下消息:

错误:无法访问jarfile路径/second_program.jar

首先,我认为其路径是错误的。但是,我已经在Windows和Linux终端上执行了第二个jarfile,没有任何问题。


//IN THE FIRST PROGRAM
                Process process = null;
                List<String> commands = new ArrayList<String>();

                if (server.equals("TEST_linux")) {
                    commands.add("/bin/java");
                    commands.add("-jar");
                    commands.add("/mnt/c/Users/second_program.jar");
                    commands.add("param1");
                    commands.add("param2");
                } else {
                    commands.add("java");
                    commands.add("-jar");
                    commands.add("C:/Users/second_program.jar");
                    commands.add("param1");
                    commands.add("param2");                    
                }
                System.out.println(commands);
                //Execution de la commande externe
                ProcessBuilder pb = new ProcessBuilder(commands);
                System.out.println(pb.directory());
                pb.directory(new File(localFolder));
                System.out.println(pb.directory());

                pb.redirectErrorStream(true);
                process = pb.start();
                StringBuilder out = new StringBuilder();
                BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
                String line = null, previous = null;

                file_generated_by_second_program = output_folder + "/" + panel + "/file_generated_by_second_program.txt";

                myFile = new File(file_generated_by_second_program);
                writer = new BufferedWriter(new FileWriter(myFile, true));
                System.out.println(br.readLine());

第一个程序的所有其余部分都执行良好。我使用第一个生成参数的程序来执行第二个生成文件的程序。在第一个程序中使用此文件... 我不能分开启动第二个程序...

有什么想法吗?

更新:

在这里,这些错误:

//Windows before suggestions :
Error: Unable to access jarfile C:/Users/second_program.jar

//Windows after suggestions : 
Error: Unable to access jarfile C:\Users\second_program.jar

//Linux :
Error: Unable to access jarfile "/mnt/c/Users/second_program.jar"

System.out.println(br.readLine()); //==> this command doesn't execute too!

在代码的最后一行之后,我创建了differents变量,并且这些变量存在并且没有null。所以对我来说,问题仅限于提取我的代码...

已解决:路径错误...抱歉

1 个答案:

答案 0 :(得分:0)

这与不同的路径分隔符有关:

  • Windows使用的是“ \”
  • Linux使用的是“ /”

通常,可以使用File.separator属性解决以下问题,该属性将根据您正在运行的OS返回正确的字符。但是,我可以看到您最有可能使用WSL,因此在这种情况下它可能无法工作,因此您必须对此进行硬编码。

总结起来,您需要为Windows修复jar的路径,并区分两种操作系统的输出路径。