我有一个简单的控制台应用程序,它有时需要进行图形操作,对于那些我使用JavaFX框架(也有一些功能,我需要像CSS样式文本)我只是产生一些形状和文本到一个隐藏的画面,然后保存那些文件,这一切,
我知道,使用JavaFX编写工作,我不得不图形操作传递到JavaFX的线程,但是当一切都做,我不得不关闭应用程序(几个小时后),这个线程了JavaFx仍然保持开放...我真的不要强制退出与System.exit()的,因为如果事情是阻止我可能想知道/等待(我也不想执行的一切作为JavaFX应用程序(如JavaFX组件是我的主要应用小于1%)
代码很简单,谷歌上搜索周围我发现只有在使用
Platform.exit();
这似乎并不工作,我也试着与平台参数,如打
Platform.setImplicitExit(false);
这里是我的测试应用程序,它可以运行:
import javafx.application.Platform;
import javafx.embed.swing.JFXPanel;
import javafx.geometry.Pos;
import javafx.scene.layout.VBox;
public class SOTestFX {
public static void main(String[] args) {
SOTestFX t = new SOTestFX();
t.runFxThread();
}
public void runFxThread(){
//Application.launch(args);
final JFXPanel jfxPanel = new JFXPanel();
Platform.runLater(new Runnable() {
@Override
public void run() {
System.err.println("CREATING IMAGE");
simpleFXoperations();
System.err.println("NOW CALL EXIT");
System.err.println("JAVA FX THREAD SHOULD BE EXITED NOW");
Platform.exit();
}
});
try {
Thread.sleep(3000); // just wait a bit if something should happen, let it happen..
} catch (InterruptedException e) {
e.printStackTrace();
}
//jfxPanel.removeNotify(); // return -> java.lang.NullPointerException
//Platform.exit(); // -> does nothing
System.err.println("i will never die!");
}
public void simpleFXoperations(){
VBox vbox1 = new VBox();
vbox1.setAlignment(Pos.BOTTOM_CENTER);
vbox1.setStyle("-fx-border-style: solid;"
+ "-fx-border-width: 1;"
+ "-fx-border-color: white");
System.err.println("simpleFXoperations() _DONE");
}
}
这是线程从未关闭
“附加监听器” - 线程t @ 17 java.lang.Thread.State中:RUNNABLE
锁定的可拥有同步: - 无
“JavaFX应用程序线程” - 线程t @ 13 java.lang.Thread.State中:在com.sun.glass.ui.gtk.GtkApplication._runLoop(本机方法)RUNNABLE在com.sun.glass.ui.gtk.GtkApplication $ 3 $ 1.run(GtkApplication.java:82)在java.lang.Thread.run(Thread.java:722)
锁定的可拥有同步: - 无
更新:我在Linux上使用的Fedora 16 64位最新的Oracle JDK 7u17 64位。