클릭하면 응용 프로그램을 다시 시작할 응용 프로그램에 단추를 추가 할 용의가 있습니다. 나는 Google을 검색했지만 this one을 제외하고는 아무 도움이되지 않는다. 그러나 여기에 나오는 절차는 자바의 WORA 개념을 위반하는 것입니다.스윙 응용 프로그램을 다시 시작하십시오.
다른 Java 중심적 방법으로이 기능을 사용할 수 있습니까? 다른 사본을 포크 한 다음 종료 할 수 있습니까?
미리 감사드립니다. 도와 주셔서 감사합니다. 난 당신이 또한 so
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);
}
});
그리고에 보여 주었다 개념을 고려하여 다음과 같은 코드를 작성
@deporter 나는 솔루션을 시도했지만 그것은 :(
@mKorbel 작동하지 않습니다 :
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를 사용하여 새로운 UI가 열립니다. 그러나 JYM 메뉴 항목을 누르면 응용 프로그램이 완전히 종료됩니다. 다시 말하면 다시 시작되지 않습니다.
정말 고맙습니다.
해결되었습니다.
그냥 호기심, 자바의 WORA 개념은 무엇입니까? –
도움이 될 수 있습니다. http://stackoverflow.com/questions/4159802/how-can-i-restart-a-java-application – MByD
@HarryJoy - http://en.wikipedia.org/wiki/Write_once,_run_anywhere – MByD