Выполнение JAR-файла с использованием Java работает только на ПК - PullRequest
0 голосов
/ 16 января 2019

Я пытаюсь создать модуль запуска для приложения Java, который будет автоматически обновлять / загружать файл jar в домашнюю область компьютера пользователя, а затем приступать к его выполнению.

Я пытался запустить файл jar, используя классы Process и Runtime, и у меня не было ничего, кроме успеха на моем собственном компьютере, но кажется, что 1:10 людей, которые пробуют это распределенное программное обеспечение (также в jar может показаться, что файл jar не работает (для справки, я убедился, что у всех людей, которые тестировали это приложение, была установлена ​​новейшая версия Java).

Код, отвечающий за запуск файла JAR, выглядит следующим образом:

 public static void startApplication() {
        try {
             Process proc = Runtime.getRuntime().exec("java -jar "+(saveDirectory + fileName));
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }
    }

Я ожидал, что файл jar fileName будет открыт в папке saveDirectory, однако в сценарии с компьютера на компьютер это не всегда имело место. Мне просто интересно, есть ли лучший способ сделать это, который обеспечит успех в 100% случаев.

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Ваш исходный код выполняется исходя из того, что «java» (в общем случае) доступен в «PATH» (или, в частности, доступен в текущем рабочем каталоге).

Точка @Karol может такжебыть проблемой!(exec(String[]) лучше, чем exec(String))

Но более надежный способ вызвать java / быть независимым от существования и содержимого (OS) переменной 'PATH' - это предварительно ожидать: *От 1007 * до java.(Поскольку это всегда установлено , а имеет приоритет над возможными переменными ОС ) Теперь вам нужно только помолиться о переменной PATH_EXT.:) (например, " .exe; .bat ..." в Windows) ... но есть надежда: там (на клиентском компьютере) установлен и работает хотя бы jvm!:)

И чтобы сделать вашу программу еще более переносимой, вы должны заменить все / s и \ s (разделители пути, зависящие от платформы) на:

System.getProperty("file.separator");

[3]

0 голосов
/ 16 января 2019

Если user.home содержит пробелы, это может не сработать, поскольку команда оценивается как есть из-за того, что она указана как String. Используйте версию Runtime.exec(String[]):

Runtime.getRuntime().exec(new String[] { "java", "-jar", saveDirectory + fileName });

Кроме того, вы можете нормализовать путь JAR:

Path path = Paths.get(saveDirectory, fileName);
String fullPath = path.normalize().toAbsolutePath().toString();
Runtime.getRuntime().exec(new String[] { "java", "-jar", fullPath });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...