Reinicie o aplicativo Swing

Estou disposto a adicionar um botão no meu aplicativo que, ao clicar, reiniciará o aplicativo. Pesquisei no Google, mas não encontrei nada útil, excetoest. Mas o procedimento a seguir aqui está violando o conceito WORA de Java.

Existe alguma outra maneira centralizada de Java para alcançar esse recurso? É possível apenas bifurcar outra cópia e sair?

Desde já, obrigado. Eu aprecio sua ajuda

@ deporter Tentei sua solução, mas ela não está funcionando:

@ mKorbel Eu escrevi o código a seguir, adotando o conceito que você havia mostrado emassi

    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);
        }
    });

E também

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);

está funcionando, mas apenas uma vez. Se eu iniciar o aplicativo pela primeira vez e pressionar o menu JYM, ele será encerrado e após alguns segundos abrirá uma nova interface do usuário com o cmd, mas se eu pressionar o menu JYM, o aplicativo será encerrado completamente, ou seja, não será mais iniciad

Eu realmente aprecio sua ajuda

stá resolvid

questionAnswers(4)

yourAnswerToTheQuestion