2014-09-10 6 views
1

Я пытаюсь выяснить, как сделать регулярное приложение Java повторно открывать на закрытии или просто не закрывать его. Я понимаю, что это возможно с помощью приложения swing с использованием DO_NOTHING_ON_CLOSE, но мое приложение не использует swing.Как перезапустить приложение Java при закрытии программно

Скажем, у меня есть следующая программа запущена:

public static void main(String[] args) { 
    new MyThread(); 
} 

И MyThread работает постоянно.

Скажите, что пользователь закрывает программу, есть ли в любом случае, чтобы обнаружить, что программа Java закрывается и снова открывать ее, или даже лучше сделать ее DO_NOTHING_ON_CLOSE без качелей?

+0

См. Http://stackoverflow.com/questions/2541597/how-to-gracefully-handle-the-sigkill-signal-in-java – mostruash

+0

Это может быть полезно, я посмотрю, спасибо :) –

+0

Пожалуйста, не редактируйте свой вопрос так, чтобы он менял его так, чтобы существующие ответы *, которые отвечали на ваш исходный вопрос *, больше не делали этого. Вместо этого задайте новый вопрос. – Raedwald

ответ

0

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

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

+0

У меня уже была идея сделать это, я отредактировал OP, мне просто нужен пример того, как создать этот второй «сторожевой» процесс. Благодаря :) –

0

Если вы действительно хотите, чтобы перезапустить приложение, увидеть это:

How can I restart a Java application?

Но из вашего вопроса, он смотрит на меня, что вы хотите, чтобы пользователь, чтобы закрыть приложение. Вы не можете этого предотвратить, даже если вы ничего не делаете, когда пользователь нажимает на значок закрытия X или нажимает ALT + F4, пользователь все равно сможет убить ваше приложение из диспетчера задач, например.

+0

Я понимаю это, но возможно ли создать второй процесс в диспетчере задач, и когда тот или другой будет убит, он снова откроет его? –

+2

Op хочет перезапустить приложение в контексте, когда пользователь закрывает приложение, он обнаруживается и перезапускается или вообще не закрывает (без качания). Ссылка на заданный вами вопрос предоставляет только способ перезагрузки без информации о том, как обнаружить закрытие приложения. Хотя я не эксперт в этом, но есть концепция [Shutdown hook] (http://docs.oracle.com/javase/6/docs/api/java/lang/Runtime.html#addShutdownHook%28java.lang. Thread% 29), что может помочь в обнаружении закрытия приложения. –

+0

В своем ответе я написал, что вы не можете запретить закрытие приложения. Ключи ShutDown можно использовать для запуска некоторого кода до закрытия приложения, но не для его закрытия. – icza

Смежные вопросы