JavaFX - SWT互操作: 应用程序冻结

4
我正在构建一个基于Eclipse 3.5的RCP应用程序。感谢我在oracle.com上找到的两篇文章(12),我已经能够实现一个显示饼图的工作RCP视图。
不幸的是,如果我关闭视图并重新打开它,那么应用程序会冻结并且永远无法返回。
我正在使用JavaFX 2.2.7,在Windows 7 X64上的JDK 1.6.0.31下运行。
这里是代码。该视图是org.eclipse.ui.part.ViewPart的标准子类。
    Composite panel = new Composite(parent, SWT.NONE);
    RowLayout layout = new RowLayout();
    panel.setLayout(layout);
    FXCanvas fxCanvas = new FXCanvas(panel, SWT.NONE) {
        @Override
        public Point computeSize(int wHint, int hHint, boolean changed) {
            getScene().getWindow().sizeToScene();
            int width = (int) getScene().getWidth();
            int height = (int) getScene().getHeight();
            return new Point(width, height);
        }
    };

    Scene scene = new Scene(new Group());
    RGB rgb = panel.getBackground().getRGB();
    Color color = Color.rgb(rgb.red, rgb.green, rgb.blue);
    scene.setFill(color);
    ObservableList<PieChart.Data> pieChartData = FXCollections.observableArrayList();
    pieChartData.add(new PieChart.Data("label1", 20));
    pieChartData.add(new PieChart.Data("label2", 20));
    pieChartData.add(new PieChart.Data("label3", 20));
    pieChartData.add(new PieChart.Data("label4", 20));
    pieChartData.add(new PieChart.Data("label5", 20));
    Chart chart = new PieChart(pieChartData);
    chart.setLegendSide(Side.RIGHT);
    ((Group) scene.getRoot()).getChildren().add(chart);
    fxCanvas.setScene(scene);

有人可以帮忙吗?


2
没有异常吗? - Dreen
不,没有任何例外,也没有线程转储、日志或其他信息:它只是一直卡住了。 - Sébastien
1
如果你使用线程转储(VisualVM),你能看到卡住的线程吗? - Jack G.
不要有任何卡住的线程。 - Sébastien
1个回答

2
问题已经解决。它是由于应用程序其他地方进行了一些线程命名调整所导致的。有些事情确实不应该做。过度依赖线程名称就是其中之一。 :)
一个实用类依赖于线程名称在UI线程中运行代码,因为JavaFX更改了正在运行的线程的名称,所以实用类将无法正常工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接