Запуск Jar-файла из Java-программы - PullRequest
0 голосов
/ 08 марта 2019

Я пытаюсь запустить .jar из моей Java программы. Я использую ProcessBuilder для этого, но он работает неправильно.

Мне интересно, что-то мне не хватает.

Это то, что я сейчас пытаюсь запустить .jar

ProcessBuilder pb = new ProcessBuilder("java", "-jar", System.getProperty("user.home") + "/JARFile/JARFile.jar");
Process p = pb.start();

У меня правильный каталог, поэтому я не уверен, почему он не работает должным образом.

У меня что-то не так с моими параметрами в new ProcessBuilder?

1 Ответ

0 голосов
/ 08 апреля 2019

1) в третьем аргументе задайте полный путь к файлу:

ProcessBuilder pb = new ProcessBuilder("java", "-jar",
            "/home/meiskalt7/Documents/runJar-55056616-1.0-SNAPSHOT.jar");

Результат будет выглядеть так:

public static void main(String[] args) throws IOException {
    ProcessBuilder pb = new ProcessBuilder("java", "-jar",
            "/home/meiskalt7/Documents/runJar-55056616-1.0-SNAPSHOT.jar");
    Process p = pb.start();
    InputStream in = p.getInputStream();
    System.out.println(new BufferedReader(new InputStreamReader(in))
            .lines().collect(Collectors.joining("\n")));
}

и в консоли вы увидите результат выполнения

2) Если все будет хорошо, тогда вы должны проверить системное свойство с помощью

System.out.println(System.getProperty("user.home"))

, и если путь выглядит как путь на первом шаге, тогда вы должны сравнить путь с оператором равенства:

System.out.println((System.getProperty("user.home") + "/JARFile/JARFile.jar")
                                                      .equals([YOUR FULL PATH]))

Может быть, ваша проблема с символами другого языка в пути

2 *) если что-то пойдет не так, вы можете проверить ошибку выполнения процесса в потоке ошибок вашего процесса:

InputStream err = p.getErrorStream();
        System.out.println(new BufferedReader(new InputStreamReader(err))
                .lines().collect(Collectors.joining("\n")));
...