Ошибка: невозможно получить доступ к jarfile при запуске команды компоновщика процессов - PullRequest
1 голос
/ 26 сентября 2019

Я строю одну программу на Java с основной в jarfile, и я хочу выполнить другую.Вторая программа также является jarfile.

Чтобы выполнить вторую программу, я использую компоновщик процессов для выполнения второго jarfile с этими аргументами.Но я не работал, и у меня есть это сообщение:

Ошибка: невозможно получить доступ к пути jarfile / second_program.jar

Во-первых, я думаю, что его путь был неправильным.Но я выполнил второй jarfile в терминале на Windows и Linux без каких-либо проблем.


//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!

После последней строки моего кода я создаю разные переменные, и эти переменные существуют, и их нет.Так что для меня проблема ограничена извлечением моего кода ...

решено: у меня была ошибка в пути ... извините

1 Ответ

0 голосов
/ 26 сентября 2019

Это связано с различными символами разделителя пути:

  • Windows использует "\"
  • Linux использует "/"

Обычно,Следующая проблема может быть решена с помощью свойства File.separator, которое будет возвращать правильный символ в зависимости от используемой ОС.Тем не менее, я вижу, что вы, скорее всего, используете WSL, так что в этом случае он может не работать, и вам придется жестко его кодировать.

Подводя итог, вам нужно исправить путь к jar для Windows и разграничить пути вывода для обеих ОС.

...