【问题标题】:Error: Unable to access jarfile when I launch a process builder command错误:启动进程构建器命令时无法访问 jarfile
【发布时间】:2020-01-26 14:02:13
【问题描述】:

我用 Java 构建了一个带有 main 的程序到一个 jarfile 中,我想执行另一个程序。第二个程序也是一个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!

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

已解决:我的路径有误...抱歉

【问题讨论】:

  • 您遇到的错误是什么?
  • 您在提问时需要更加精确。请添加完整的源代码和完整的错误。 localFolder 的值是多少?
  • localFolder = "/mnt/c/Users" 对于 Linux 或 "C:/Users/" 对于 Windows 完全错误仅是:错误:无法访问 jarfile “第二个程序的路径。jar”

标签: java executable-jar processbuilder


【解决方案1】:

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

  • Windows 正在使用“\”
  • Linux 正在使用“/”

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

总而言之,您需要修复 Windows 的 jar 路径并区分两种操作系统的输出路径。

【讨论】:

  • 对于Windows,我尝试用\...修改路径,没有改变对于Linux,路径是正确的(我使用/)但我遇到了与Windows相同的错误。
猜你喜欢
  • 2013-10-31
  • 1970-01-01
  • 2021-01-22
  • 2017-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-27
  • 2017-04-13
相关资源
最近更新 更多