内の他のスレッドのJavaFXのを終了していない、 このコードは8つのアクティブスレッドを示しています。Platform.exit()ので、私はそれを閉じたいとき、私は複数のアクティブなスレッドを持っていたJavaFX 8アプリを持っているOSX
ThreadGroup group = Thread.currentThread().getThreadGroup();
LOG.debug("Number of active threads = " + group.activeCount());
をPlatform.exit();
とPlatform.setImplicitExit(true);
を使用しても、きれいな出口が得られません。
Platform.exit();
を呼び出す前または後にすべてのスレッドを強制終了しようとしましたが、成功しませんでした。
割り込み前にスレッドをデーモンとして設定しても解決しませんでした。他のアプリは他のアプリまたはスタンドアロン内から起動できるようSystem.exit(0)
を呼び出す
while (group != null) {
group.setDaemon(true);
group.interrupt();
group = Thread.currentThread().getThreadGroup();
}
は、ここではオプションではありません。
終了前に表示されるエラーはNot on FX application thread; currentThread = JavaFX Application Thread
です。
編集1:エラーのスタックトレース:
ERROR SimpleUncaughtExceptionHandler.java uncaughtException 34 [JavaFX Application Thread] Uncaught exception
java.lang.IllegalStateException: Not on FX application thread; currentThread = JavaFX Application Thread
at com.sun.javafx.tk.Toolkit.checkFxUserThread(Toolkit.java:236) ~[jfxrt.jar:?]
at com.sun.javafx.tk.quantum.QuantumToolkit.checkFxUserThread(QuantumToolkit.java:423) ~[jfxrt.jar:?]
at javafx.stage.Window.setShowing(Window.java:921) ~[jfxrt.jar:?]
at javafx.stage.Window.hide(Window.java:947) ~[jfxrt.jar:?]
at com.sun.javafx.stage.WindowPeerListener.closed(WindowPeerListener.java:100) ~[jfxrt.jar:?]
at com.sun.javafx.tk.quantum.GlassWindowEventHandler.run(GlassWindowEventHandler.java:118) ~[jfxrt.jar:?]
at com.sun.javafx.tk.quantum.GlassWindowEventHandler.run(GlassWindowEventHandler.java:40) ~[jfxrt.jar:?]
at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_121]
at com.sun.javafx.tk.quantum.GlassWindowEventHandler.lambda$handleWindowEvent$423(GlassWindowEventHandler.java:150) ~[jfxrt.jar:?]
at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389) ~[jfxrt.jar:?]
at com.sun.javafx.tk.quantum.GlassWindowEventHandler.handleWindowEvent(GlassWindowEventHandler.java:148) ~[jfxrt.jar:?]
at com.sun.glass.ui.Window.handleWindowEvent(Window.java:1266) ~[jfxrt.jar:?]
at com.sun.glass.ui.Window.notifyDestroy(Window.java:1183) ~[jfxrt.jar:?]
編集2:アクティブなスレッドの一覧:
DEBUG [JavaFX Application Thread] isDeamon : false; name : main
DEBUG [JavaFX Application Thread] isDeamon : true; name : QuantumRenderer-0
DEBUG [JavaFX Application Thread] isDeamon : false; name : JavaFX-Launcher
DEBUG [JavaFX Application Thread] isDeamon : true; name : URL-Loader-2
DEBUG [JavaFX Application Thread] isDeamon : true; name : URL-Loader-1
DEBUG [JavaFX Application Thread] isDeamon : true; name : JavaFX Application Thread
DEBUG [JavaFX Application Thread] isDeamon : true; name : Java2D Queue Flusher
DEBUG [JavaFX Application Thread] isDeamon : true; name : Prism Font Disposer
DEBUG [JavaFX Application Thread] isDeamon : true; name : Reference Handler
DEBUG [JavaFX Application Thread] isDeamon : true; name : Thread-6
DEBUG [JavaFX Application Thread] isDeamon : false; name : AWT-Shutdown
DEBUG [JavaFX Application Thread] isDeamon : true; name : Java2D Disposer
DEBUG [JavaFX Application Thread] isDeamon : true; name : Signal Dispatcher
DEBUG [JavaFX Application Thread] isDeamon : true; name : Disposer
DEBUG [JavaFX Application Thread] isDeamon : true; name : Finalizer
DEBUG [JavaFX Application Thread] isDeamon : false; name : AWT-EventQueue-0
DEBUG [JavaFX Application Thread] isDeamon : true; name : Thread-5
DEBUG [JavaFX Application Thread] isDeamon : true; name : Timer-0
「クリーンな出口を得られない」とはどういう意味ですか? – DVarga
'FXアプリケーションスレッドではありません。'例外なしで終了します。 – josephino
@GltknBtn 'thread.stop()'、** ever **を使わないでください。 [本質的に安全ではありません](http://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html#stop--)、廃止されました。 –