我有一个swing应用程序,在里面我从javafx2 jdk1.7_17添加了一个JFXpanel(也试过1.7_15)。我确实在 EDT 中创建了 JFXpanel 并将其添加到摆动选项卡式窗格中,然后将场景添加到 javaFX 线程中的 FXPanel,如文档中所示。如果我在一切正常后运行应用程序,如果我停止应用程序并再次运行它,jvm 会崩溃,说有问题的框架 libdbus。关闭应用程序后,无论我尝试多少次,jvm 通常都会崩溃并抱怨 dbus,但并非总是如此:
JRE version: 7.0_17-b02
Java VM: Java HotSpot(TM) 64-Bit Server VM (23.7-b01 mixed mode linux-amd64 compressed oops)
Problematic frame:
C [libc.so.6+0x12fbd6]Java Result: 134
有时我得到这个:
GConf-WARNING **: Got Disconnected from DBus.
如果我重新启动电脑,它第一次运行正常,然后如果我关闭/重新运行,它在启动时一直崩溃。我正在运行 Fedora 18,我相信它可能与操作系统相关,因为 java FX 使用的是本机库。
FXPanelJob fxPanelJob = new FXPanelJob(fxPanel);
tabbedPane = new JTabbedPane();
tabbedPane.addTab("table", fxPanel);
Platform.runLater(fxPanelJob);
private class FXPanelJob implements Runnable {
private JFXPanel fxPanel;
private volatile boolean done = false;
public FXPanelJob(JFXPanel fxPanel) {
this.fxPanel = fxPanel;
}
@Override
public void run() {
initFX(fxPanel);
done = true;
}
private void initFX(JFXPanel fxPanel) {
// This method is invoked on the JavaFX thread
VBox vbox = new VBox();
Scene scene = new Scene(vbox, 300, 200);
TableView<ReportRaw> table = new Table();
vbox.getChildren().addAll(table);
VBox.setVgrow(table, Priority.ALWAYS);
fxPanel.setScene(scene);
}
}
由于第一次运行,我只是猜测在应用程序退出时关闭 javafx 可能是一个问题。在 windowClosing 事件中,我有:
Platform.runLater(new Runnable(){ public void run(){
Platform.exit();
});
更新:
事实证明这不是 java fx 问题,我切换到 JDK 6,一切都很好。我认为这是特定于操作系统问题的。在没有 java fx 的情况下使用 jdk 7 仍然可能触发 jvm 崩溃。
如果有人知道可能导致 jvm 崩溃的原因,我将不胜感激。先感谢您
更新 2
找到了一个类似的帖子,似乎已经解决了,但我不确定: http ://ubuntuforums.org/showthread.php?t=1697231&page=3 将此用于 jvm 争论 -XX:-UseCompressedOops。当我确保它不再崩溃时,我会将其作为答案发布。
更新 3
无法解决它我注释掉了我的 javafx 代码作为解决方案。我相信它与 EDT 相关,但我不能保证。在 Swing 应用程序上添加 JavaFx 面板后,它似乎发生了几行。并不总是在同一条线上。如果删除一切正常,所以我想它仍然是一个不成熟的项目。