Перезапустите приложение Swing - PullRequest
2 голосов
/ 22 февраля 2012

Я хочу добавить в свое приложение кнопку, которая при перезапуске перезапустит приложение. Я искал Google, но не нашел ничего полезного, кроме этого . Но следующая процедура нарушает концепцию WORA в Java.

Есть ли другой Java-ориентированный способ для достижения этой функции? Можно ли просто разорвать другую копию и затем выйти?

Спасибо заранее. Я ценю вашу помощь.


@ deporter Я попробовал ваше решение, но оно не работает: (

@ mKorbel Я написал следующий код, взяв концепцию, которую вы показали в , поэтому

    JMenuItem jMenuItem = new JMenuItem("JYM");
    jMenuItem.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {

            ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(10);
            executor.setContinueExistingPeriodicTasksAfterShutdownPolicy(true);
            executor.setExecuteExistingDelayedTasksAfterShutdownPolicy(true);
            ScheduledFuture<?> future = executor.schedule(new Runnable() {

                @Override
                public void run() {
                    try {
                        Process p = Runtime.getRuntime().exec("cmd /c start java -jar D:\\MovieLibrary.jar");
                    } catch (IOException ex) {
                        ex.printStackTrace();
                    }
                }
            }, 2, TimeUnit.SECONDS);                
            executor.shutdown();
            try {
                executor.awaitTermination(10, TimeUnit.SECONDS);
            } catch (InterruptedException e1) {
                e1.printStackTrace();
            }

            System.exit(0);
        }
    });

А также:

ScheduledExecutorService schedulerExecutor = Executors.newScheduledThreadPool(2);
            Callable<Process> callable = new Callable<Process>() {

                @Override
                public Process call() throws Exception {
                    Process p = Runtime.getRuntime().exec("cmd /c start java -jar D:\\MovieLibrary.jar");
                    return p;
                }
            };
            FutureTask<Process> futureTask = new FutureTask<Process>(callable);
            schedulerExecutor.submit(futureTask);
            schedulerExecutor.shutdown();
            try {
                schedulerExecutor.awaitTermination(10, TimeUnit.SECONDS);
            } catch (InterruptedException e1) {
                e1.printStackTrace();
            }

            System.exit(0);

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

Я очень ценю вашу помощь.


Решено.

Ответы [ 2 ]

3 голосов
/ 22 февраля 2012

Решение:

Вызовите следующий код из ActionListener.

ScheduledExecutorService schedulerExecutor = Executors.newScheduledThreadPool(2);
Callable<Process> callable = new Callable<Process>() {

    @Override
    public Process call() throws Exception {
        Process p = Runtime.getRuntime().exec("cmd /c start /b java -jar D:\\MovieLibrary.jar");
        return p;
    }
};
FutureTask<Process> futureTask = new FutureTask<Process>(callable);
schedulerExecutor.submit(futureTask);           

System.exit(0);

Спасибо.

0 голосов
/ 22 февраля 2012

Ссылка, указанная вами в вашем ответе, - лучший способ перезапустить ваше приложение Swing.Позвольте мне спросить вас, не плохо ли это сделать через "WORA"?Большинство приложений поставляются с платформой, ориентированной на платформу.Это делает ваше приложение похожим на нативное.Планируете ли вы развернуть все приложение в виде файла JAR с двойным кликом?Двойной щелчок по банку не очень интуитивно понятен.Иногда, если локальный компьютер устанавливает winip или winrar, например, если дважды щелкнуть файл jar, приложение не запускается по умолчанию.

Для решения таких проблем лучше всего иметь собственный лаунчер.Взгляните на визуализатор базы данных, он имеет встроенные средства запуска для своей программы Java Swing

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