2017-02-01 4 views
1

I einen javafx 8 app aufweisen, die mehr aktiven Thread aufweist, wenn ich es schließen möge, Dieser Code zeigt 8 aktives Threads:Platform.exit() endend javafx nicht wegen anderer Threads in OSX

ThreadGroup group = Thread.currentThread().getThreadGroup(); 
    LOG.debug("Number of active threads = " + group.activeCount()); 

Mit Platform.exit(); und Platform.setImplicitExit(true); bekomme ich keinen sauberen Ausgang.

Ich habe versucht, alle Themen vor oder nach der Tötung Platform.exit(); Aufruf aber ohne Erfolg.

Auch Themen wie deamons Einstellung, bevor es nicht lösen zu unterbrechen.

 while (group != null) { 
     group.setDaemon(true); 
     group.interrupt(); 
     group = Thread.currentThread().getThreadGroup(); 
    } 

Aufruf System.exit(0) ist keine Option hier als andere Apps können aus anderen Anwendungen oder Standalone gestartet werden.

die Fehler vor Austritt gezeigt sind Not on FX application thread; currentThread = JavaFX Application Thread.

Edit 1: die Stapelüberwachung des Fehlers:

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:?] 

Edit 2: Liste der aktiven Threads:

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 
+0

Was bedeutet „mich keine saubere Ausfahrt bekommt“? – DVarga

+0

verlassen, ohne Ausnahme 'nicht auf FX Anwendungs-Thread ..' – josephino

+4

@GltknBtn Verwenden 'Thread.stop nicht()' ** ** je. Es ist [inherently unsafe] (http://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html#stop--) und wurde als veraltet eingestuft. –

Antwort

1

dieses Problem und OSX System menubar not working in JavaFX haben die gleiche Ursache, die der Bildschirm spritzen ist Ich verwende "java -splash:..", die Deaktivierung löst das Problem.

Da Splash Screen ein AWT Feature und kein JavaFX Feature ist, scheint es in AWT Event Thread und nicht JavaFX Ereignis Thread gestartet werden.

Es sieht so aus, als ob die splash screen in JavaFX aus der Anwendung als JavaFX Pane implementiert werden sollte.

+1

Wie bizarr, möchten Sie [einen Fehler melden] (http://bugreport.java.com) . – jewelsea

+0

@jewelsea Aber vielleicht sollte SplashScreen nicht mit JavaFX verwendet werden, oder Preloader sollte stattdessen verwendet werden – josephino

+0

@jewelsea Sie hatten Recht, Fehler gemeldet: http://bugs.java.com/bugdatabase/view_bug.do?bug_id= JDK-8175977 – josephino

Verwandte Themen