Как я могу запустить файл .jar в Java - PullRequest
5 голосов
/ 24 ноября 2011

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

Вот полный класс обновления: http://dl.dropbox.com/u/38414202/Update.txt

Вот метод, который я используюзапустить мой файл .jar:

 String currDir = new File("(CoN).jar").getAbsolutePath();
 Process runManager = Runtime.getRuntime().exec("java -jar " + currDir);

Ответы [ 5 ]

1 голос
/ 24 ноября 2011

Мне не понятно, зачем вам запускать банку с звонком на exec().Учитывая, что вам нужно запустить код в файле .jar из Java-программы, вы можете просто запустить метод main(), как определено в манифесте jar, и записать его вывод - где бы это ни было.

Использованиеexec() нормально, когда вам нужно вызвать программу из базовой операционной системы, но есть более простые способы сделать это, если и вызывающий, и вызываемый являются Java-программами.

Теперь, если ваш jar собираетсяизменяется динамически, и вам нужно обновить вашу программу в соответствии с новым jar-файлом, существуют механизмы для перезагрузки ее содержимого, например, посмотрите на этот другой post .

0 голосов
/ 29 декабря 2011

Никто здесь, казалось, не помог мне, поэтому я пошел спросить моего друга, и у меня все было почти правильно.Страшно требуется, чтобы строка была массивом.

решение:

String[] cmd = {"java", "-jar", currDir};
try {
  Runtime.getRuntime().exec(cmd);
} catch (IOException e1) {
  e1.printStackTrace();
}
0 голосов
/ 06 декабря 2011

Функция exec не выполняет автоматический поиск в PATH для запуска процесса, поэтому вы должны передать полный путь для двоичного файла java.

Это можно сделать с помощью системного свойства java.home, см. Ответ: ProcessBuilder - запустить другой процесс / JVM - HowTo?

0 голосов
/ 24 ноября 2011

Я думаю, вы должны захватить stream, как это:

BufferedReader stdInput = new BufferedReader(new InputStreamReader(runManager.getInputStream()),8*1024);

BufferedReader stdError = new BufferedReader(new InputStreamReader(runManager.getErrorStream()));

// read the output from the command

String s = null;
System.out.println("Here is the standard output of the command:\n");
while ((s = stdInput.readLine()) != null) {
System.out.println(s);
    }
0 голосов
/ 24 ноября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...