Перезапустите приложение Swing

Я хочу добавить в свое приложение кнопку, которая при перезапуске перезапустит приложение. Я искал в 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)

Ваш ответ на вопрос