JavaFX 응용 프로그램을 사용하여 별도의 프로세스 (updater executable)를 실행하고 종료해야하는 경우가 있습니다. 나는 ProcessBuilder.command()
을 사용하여 별도의 프로세스를 실행 중이며 하위 프로세스가 !isAlive()
이 될 때 프로세스가 완전히 실행된다는 것을 확인합니다. 이 후 Window.getWindows().forEach(::dispose)
및 System.exit(0)
을 실행하여 응용 프로그램을 종료하려고합니다.JavaFX 응용 프로그램이 System.exit() 이후에 종료되지 않습니다.
System.exit(0)
호출 후 응용 프로그램이 중단되지만 별도의 프로세스가 실행되지 않으면 응용 프로그램이 올바르게 종료됩니다.
"자바 FX 애플리케이션 쓰레드"# 32 프리 오 = 5 os_prio = 0 TID = 0x000000001f4fe000 NID = 0x44d0되는 Object.wait()에서 [0x0000000023f4d000] 자바 : 여기
메인 스레드 스택 트레이스의 일부이다. lang.Thread.State : java.lang.Object.wait (네이티브 메소드)의 WAITING (오브젝트 모니터) java.lang.Thread.join (Thread.java:1252) - 잠김 < 0x00000006c21ac608> .lang.Thread). 에서 java.lang.Thread.join (Thread.java:1326) java.lang.ApplicationShutdownHooks.runHooks (ApplicationShutdownHooks.java:106) java.lang.ApplicationShutdownHooks $ 1.run (ApplicationShutdownHooks.java:46) java.lang.Shutdown.sequence에서 java.lang.Shutdown.runHooks (Shutdown.java:123)에서 에서 617,451,515,(Shutdown.java:167) 에 java.lang.Shutdown.exit (Shutdown.java:212) - 잠김 < 0x00000006c2148fb8> (java.lang.Class.Shutdown)의 java.lang.Runtime.exit (Runtime.java:109) java.lang.System.exit (System.java:971)에서
그래서 일부 ApplicationShutdownHooks
완성을위한 응용 프로그램 대기를 보인다. 응용 프로그램에 두 개의 후크가 추가되었지만이를 제거한 후 stacktrace는 동일하게 유지됩니다.
암시 적으로 어떤 후크를 추가 할 수 있습니까? 어쩌면 분리 된 프로세스가 다른 프로세스로 실행되어 하위 프로세스가 닫히기 전에 닫을 수 있습니까?
UPD :이 응용 프로그램은 실제로 전체 JavaFX 응용 프로그램이 아니라 JavaFX 부분이있는 AWT 응용 프로그램입니다.
JavaFX 응용 프로그램에서'System.exit'이 허용되지 않는다는 내용의 문서가 보이지 않습니다. 게시 한 링크는 실제로 라이프 사이클의 일부로 System.exit()에 대해 이야기하고 있습니다. – Thirler
Platform.exit()을 사용해야한다고 말하는 것은 아니며, 사용하는 것이 더 바람직하다는 것입니다. System.exit() 만 다른 Java 응용 프로그램으로 사용할 수 있습니다. Platform.exit()는 exit() 할 수있는 더 깨끗한 방법을 가지고 있으며 파생 된 스레드와 같이 종료하기 전에 모든 문제를 해결해야합니다. – LMiranda