4

我正在构建一个基于 Eclipse 3.5 的 RCP 应用程序。多亏了我在 oracle.com 上找到的两篇文章(1、2 ,我才能够实现一个显示饼图的有效 RCP 视图。

不幸的是,如果我关闭视图并重新打开它,那么应用程序就会冻结并且永远不会回来。

我在 Windows 7 X64 上的 JDK 1.6.0.31 下使用 JavaFX 2.2.7。

这是代码。该视图是 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);

任何人都可以帮忙吗?

4

1 回答 1

2

问题解决了。这是由应用程序中其他地方的一些线程命名调整引起的。绝对有一些事情是不应该做的。过度依赖线程名称就是其中之一。:)

实用程序类依赖线程名称在 UI 线程中运行代码,并且由于 JavaFX 更改了正在运行的线程的名称,实用程序类将不再正常工作。

于 2013-03-22T14:45:17.307 回答