Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Перезапуск java -приложения


Автор: savage_fx 25.7.2007, 23:05
Как сделать , чтобы программа закончила работу , а после сразу автоматически запустилась ее новая копия. Если можно то приведите пожадуйста пример кода.

Автор: Samotnik 26.7.2007, 01:44
Цитата(savage_fx @  25.7.2007,  23:05 Найти цитируемый пост)
Как сделать , чтобы программа закончила работу , а после сразу автоматически запустилась ее новая копия

А можно узнать, что значит АВТОМАТИЧЕСКИ  ??????????

Автор: nornad 26.7.2007, 05:59
Например, в функции main запускать главную форму в цикле и в модальном режиме. При возврате смотреть на некоторый статус и решать, запускать снова или завершаться совсем.

Автор: anonymouse 26.7.2007, 08:52
Обычно используется .bat или .sh файл. Программа при выходе возвращает специфический код. (например System.exit(99)). А в батнике проверяется, и для этого кода программа запускается снова. (можно и заменить старую версию на новую перед запуском). Если же программа вернулась с другой ошибкой, значит либо произошла непредвиденная ошибка, или планировался "полный" выход из программы.

Автор: LSD 26.7.2007, 14:42
Код
public static void main(String[] args)
{
  Runtime.getRuntime().addShutdownHook(new RunNewInstanceHook("java", "-Xmx512M", "-jar", "my.jar"));
}

private static class RunNewInstanceHook extends Thread
{
  private String[] commands;

  public RunNewInstanceHook(String... args)
  {
    commands = args;
  }

  @Override
  public void run()
  {
    try
    {
      new ProcessBuilder().command(commands).start();
    }
    catch(IOException e)
    {
      e.printStackTrace();
    }
  }
}

Автор: niasilil 27.7.2007, 06:11
addShutdownHook вместе с ProcessBuilder - красиво, блин. 

Автор: anonymouse 27.7.2007, 10:56
Сколько всего интересного оказывается добавили в 1.5.
Не знал.
 LSD +

Автор: LSD 27.7.2007, 11:51
Ну ProcessBuilder необязателен, можно обойтись Runtime.exec(), а Runtime.addShutdownHook() появилось еще в 1.3.

Автор: niasilil 27.7.2007, 21:49
Цитата(LSD @ 27.7.2007,  11:51)
Ну ProcessBuilder необязателен, можно обойтись Runtime.exec()

вопрос: 
как быть если программа xxx.jar не позволяет запускать двух инстансов самой себя, тогда при исполнении addShutdownHook запускает саму себя же xxx.jar и не запустится? новый поток, который ждет завершени xxx.jar и запускает заново? некузяво как то. 

Автор: LSD 28.7.2007, 12:38
Цитата(niasilil @  27.7.2007,  22:49 Найти цитируемый пост)
как быть если программа xxx.jar не позволяет запускать двух инстансов самой себя, тогда при исполнении addShutdownHook запускает саму себя же xxx.jar и не запустится? новый поток, который ждет завершени xxx.jar и запускает заново?

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

Автор: niasilil 28.7.2007, 20:46
Цитата(LSD @ 28.7.2007,  12:38)
Цитата(niasilil @  27.7.2007,  22:49 Найти цитируемый пост)
как быть если программа xxx.jar не позволяет запускать двух инстансов самой себя, тогда при исполнении addShutdownHook запускает саму себя же xxx.jar и не запустится? новый поток, который ждет завершени xxx.jar и запускает заново?

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

о, точно. с помощью ProcessBuilder запустить отдельный jar, в котором запустить эту же программу. 

А какой скрипт можно написать чтобы на всех ОС работал? Можно ли такое сделать? 

Автор: w1nd 29.7.2007, 00:20
Цитата(niasilil @  28.7.2007,  20:46 Найти цитируемый пост)
А какой скрипт можно написать чтобы на всех ОС работал? Можно ли такое сделать? 

Питон или Перл. Только должны быть установлены соответствующие интерпретаторы ;)

Автор: nornad 29.7.2007, 02:17
Цитата(w1nd @  29.7.2007,  03:20 Найти цитируемый пост)
Только должны быть установлены соответствующие интерпретаторы

Ну, тогда можно что угодно, вплоть то до шелла. smile 

Цитата(niasilil @  28.7.2007,  23:46 Найти цитируемый пост)
А какой скрипт можно написать чтобы на всех ОС работал?

Ну уверен, но может JavaScript?

Автор: nerezus 29.7.2007, 12:13
nornad, джаваскрипт работает в браузере и имеет куеву хучу ограничений.
И не подходит.

Цитата

А какой скрипт можно написать чтобы на всех ОС работал?
 python, к примеру. А еще правильнее - сделать JScript для венды и sh для никсов - т.е. 2 реализации

Автор: nornad 29.7.2007, 14:15
Цитата(nerezus @  29.7.2007,  15:13 Найти цитируемый пост)
джаваскрипт работает в браузере

В винде (начиная с 2к, хотя и на 9х поставить можно) жаваскрипт не только в браузере работает. Про WSH слышал? Ограничений (таких сильных, как в браузере) этот вариант не имеет.
Подозреваю, что в линухе тоже можно запустить жаваскрипт на уровне системы, а не браузера. Но гарантий не дам.

Автор: nerezus 29.7.2007, 14:24
nornad, в винде не жабаскрипт, а JScript
В линухе же тоже можно, если найдешь интерпретатор, но... найдешь ли ты его? =)

Автор: LSD 30.7.2007, 11:44
Ну если уж такая нужда в кросплатформе, то лучше написать приложение watchdog. Которое будет перезапускать указанное приложение, и заодно может проверять не зависло ли основное приложение, и если зависло то завершить его и запустить заново.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)