1

我有一个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 面板后,它似乎发生了几行。并不总是在同一条线上。如果删除一切正常,所以我想它仍然是一个不成熟的项目。

4

0 回答 0