Как сделать чтобы программа перезагружалась когда нажимаешь JButton программа закрывается и автоматически открывается?
Ответы (2 шт):
Использовать такое можно только в крайнем случае. В моем кейсе это была невозможность убить статику, внутри зависимости.
Есть один способ, он не стабилен по ряду причин, имеет недостатки, однако я им пользовался и в предсказуемом окружении он работал и работает по сей день.
Суть в запуске нового экземпляра jvm с теми же аргументами, с которыми запущен текущий экземпляр, который Вы хотите перезапустить, и немедленном завершении работы текущего экземпляра.
- Создайте для запуска приложения bat или sh файл.
- Привяжите на кнопку запуск этого файла через Runtime.exec() и потом завершайте работу Вашей программы.
Конечно можно довести до ума метод и находить и запускать нужную jvm из кода, но мне это не было надо и я этого не делал.
Большой недостаток этого способа — это не сработает в ide или надо еще придумывать как сделать так, чтобы это заработало в ide, если Вам это вдруг необходимо.
При включении компьютера открываются программы, как закрыть программы автозапуск
Я остановился на рантайме.
P.S. собрал пример, который работает из ide (у меня idea), допилить до ума предлагаю уже по месту =) тут можно дорабатывать его еще долго, прокинуть аргументы jvm например, учесть запуск из jar и тому подобные кейсы, общий принцип остается тот же.
import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.WindowConstants; import java.awt.BorderLayout; import java.awt.Dimension; public class Restart < public static final String Q = «»»; public static void main(String[] args) < JButton button = new JButton(«close»); button.addActionListener(evt -> < try < Classclazz = Restart.class; String classPath = clazz.getProtectionDomain().getCodeSource() .getLocation().toString().split(«file:/»)[1]; String javaHome = System.getProperty(«java.home»); String cmd = Q + javaHome + «/bin/java» + Q + » -cp » + Q + classPath + Q + » » + clazz.getSimpleName(); System.out.println(«cmd = » + cmd); Runtime.getRuntime().exec(cmd); System.exit(0); > catch (Exception e) < System.out.println(«cannot restart»); >>); JFrame frame = new JFrame(«restart jvm»); frame.setLayout(new BorderLayout()); frame.add(button, BorderLayout.SOUTH); frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); frame.setSize(new Dimension(300,100)); frame.setLocationRelativeTo(null); frame.setVisible(true); > >
Источник: husl.ru
Как сделать чтобы программа перезагружалась по нажатию кнопки [Java]
Как сделать чтобы программа перезагружалась когда нажимаешь JButton программа закрывается и автоматически открывается?
Отслеживать
задан 28 мар 2019 в 0:36
81 7 7 бронзовых знаков
Написать другую программу, которая будет запускать и останавливать нужную программу по нажатию кнопки
Как сделать чтобы консоль Python не закрывалась
28 мар 2019 в 3:32
зачем вам требуется перезагрузка программы?
24 мая 2019 в 8:21
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Использовать такое можно только в крайнем случае. В моем кейсе это была невозможность убить статику, внутри зависимости.
Есть один способ, он не стабилен по ряду причин, имеет недостатки, однако я им пользовался и в предсказуемом окружении он работал и работает по сей день.
Суть в запуске нового экземпляра jvm с теми же аргументами, с которыми запущен текущий экземпляр, который Вы хотите перезапустить, и немедленном завершении работы текущего экземпляра.
- Создайте для запуска приложения bat или sh файл.
- Привяжите на кнопку запуск этого файла через Runtime.exec() и потом завершайте работу Вашей программы.
Конечно можно довести до ума метод и находить и запускать нужную jvm из кода, но мне это не было надо и я этого не делал.
Большой недостаток этого способа — это не сработает в ide или надо еще придумывать как сделать так, чтобы это заработало в ide, если Вам это вдруг необходимо.
Я остановился на рантайме.
P.S. собрал пример, который работает из ide (у меня idea), допилить до ума предлагаю уже по месту =) тут можно дорабатывать его еще долго, прокинуть аргументы jvm например, учесть запуск из jar и тому подобные кейсы, общий принцип остается тот же.
import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.WindowConstants; import java.awt.BorderLayout; import java.awt.Dimension; public class Restart < public static final String Q = «»»; public static void main(String[] args) < JButton button = new JButton(«close»); button.addActionListener(evt -> < try < Classclazz = Restart.class; String classPath = clazz.getProtectionDomain().getCodeSource() .getLocation().toString().split(«file:/»)[1]; String javaHome = System.getProperty(«java.home»); String cmd = Q + javaHome + «/bin/java» + Q + » -cp » + Q + classPath + Q + » » + clazz.getSimpleName(); System.out.println(«cmd = » + cmd); Runtime.getRuntime().exec(cmd); System.exit(0); > catch (Exception e) < System.out.println(«cannot restart»); >>); JFrame frame = new JFrame(«restart jvm»); frame.setLayout(new BorderLayout()); frame.add(button, BorderLayout.SOUTH); frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); frame.setSize(new Dimension(300,100)); frame.setLocationRelativeTo(null); frame.setVisible(true); > >
Источник: ru.stackoverflow.com
Пакетный скрипт для условного перезапуска приложения
Обычные системные и / или окружающие события, такие как восстановление из режима ожидания или потеря сетевого подключения, могут вызвать проблемы для определенных приложений, которые ожидают, что они всегда будут включены и подключены. Поэтому, если у вас есть определенное приложение, которое выходит из строя или переходит в режим «не отвечает» довольно часто, и перезапуск является единственным исправлением для него, у нас есть простое исправление для вас в виде настраиваемого пакетного сценария, позволяющего просто убить приложение и перезапустите его.
В дополнение к очевидной ситуации, описанной выше, этот скрипт может использоваться для различных полезных задач, таких как:
- Легко перезапустите приложение, дважды щелкнув или используя горячую клавишу.
- Перезапускайте программу только тогда, когда она зависла или не отвечает.
- Запустите как запланированное задание, чтобы приложение всегда работало.
- В любом другом месте вы хотите автоматизировать условный перезапуск приложения.
Настройка сценария должна быть достаточно понятной для комментариев, поэтому просто настройте сценарий соответствующим образом, и все готово.
Сценарий
Вывод
В то время как вы можете найти приложения, которые выполняют в основном ту же функцию, использование простого сценария, такого как этот, позволяет избежать запуска «еще одной программы» в фоновом режиме.
Источник: gadgetshelp.com