Лучший способ корректно завершить работу программы командной строки Java

Я сделал его похожим на @humpah, но без злого кода JS.

form_iframe = all('iframe.wysihtml5-sandbox').last
within_frame form_iframe do
  page.find('body').set('SomeContent')
end
23
задан rgettman 16 February 2018 в 00:20
поделиться

7 ответов

вы можете попробовать что-то вроде этого:

Runtime.getRuntime().addShutdownHook(new Thread() {
    public void run() { /*
       my shutdown code here
    */ }
 });

редактировать:

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

из JavaDoc для Runtime (хорошее прочтение, если вы планируете использовать этот метод):

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

20
ответ дан 29 November 2019 в 02:04
поделиться

вы можете попробовать использовать Runtime.getRuntime (). AddShutdownHook () , который должен удовлетворить ваши требования. Таким образом вы можете зарегистрировать ловушку для очистки, чтобы выполнить плавное завершение работы.

ИЗМЕНИТЬ

http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Runtime.html#addShutdownHook (java.lang.Thread) public void addShutdownHook (Перехватчик потока) Регистрирует новую ловушку завершения работы виртуальной машины. Виртуальная машина Java выключается в ответ на два типа событий:

  • Программа завершается нормально, когда завершается последний недемонический поток или когда вызывается метод exit (эквивалентно System.exit), или
  • виртуальная машина завершает работу в ответ на пользовательское прерывание, такое как ввод ^ C , или общесистемное событие, такое как выход пользователя из системы или завершение работы системы.
9
ответ дан 29 November 2019 в 02:04
поделиться

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

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

5
ответ дан 29 November 2019 в 02:04
поделиться

Первые два варианта реализовать просто. Вы также можете использовать некоторые вещи JMX (я мало что знаю об этом). Tomcat использует первый подход, и я применил 1 и 2 в двух своих проектах.

2
ответ дан 29 November 2019 в 02:04
поделиться

Если вы хотите использовать версию для сокета, это очень просто реализовать. Вот код:

ServerSocket server = new ServerSocket(8080);
System.out.println("Socket listening!");
server.accept();
System.out.println("Connection received!");

Вы можете легко встроить этот код в отдельный поток, который вы запускаете с вашей программой,

3
ответ дан 29 November 2019 в 02:04
поделиться

Я бы посоветовал использовать ловушку выключения. Это позволит управлять вашей программой с помощью стандартных инструментов ОС. Также не требуется никакого дополнительного доступа к внешним ресурсам (диску, портам и т. Д.).

0
ответ дан 29 November 2019 в 02:04
поделиться

Рассмотрите возможность использования компонента JMX. Затем вы можете подключиться к JConsole локально или по сети и взаимодействовать со своим компонентом. После этого компонент сможет правильно завершить работу программы.

С Java 6 u 10 или новее вы можете сделать то же самое с JVisualVM.

1
ответ дан 29 November 2019 в 02:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: