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

JavaFX-SWT互操作:应用程序冻结,java,swt,javafx-2,eclipse-rcp,Java,Swt,Javafx 2,Eclipse Rcp,我正在基于Eclipse3.5构建一个RCP应用程序。多亏了我在oracle.com上找到的两篇文章(,),我才能够实现一个可以工作的RCP视图,它显示一个饼图 不幸的是,如果我关闭视图并重新打开它,那么应用程序就会冻结,再也不会回来 我在Windows7x64上使用JDK1.6.0.31下的JavaFX2.2.7 这是代码。视图是org.eclipse.ui.part.ViewPart的标准子类 Composite panel = new Composite(parent, SWT.N

我正在基于Eclipse3.5构建一个RCP应用程序。多亏了我在oracle.com上找到的两篇文章(,),我才能够实现一个可以工作的RCP视图,它显示一个饼图

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

我在Windows7x64上使用JDK1.6.0.31下的JavaFX2.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);
Composite panel=新复合材料(母材,SWT.NONE);
RowLayout=新的RowLayout();
面板设置布局(布局);
FXCanvas FXCanvas=newfxcanvas(面板,SWT.NONE){
@凌驾
公共点计算(int-wHint、int-hHint、boolean-changed){
getScene().getWindow().sizeToScene();
int width=(int)getScene().getWidth();
int height=(int)getScene().getHeight();
返回新点(宽度、高度);
}
};
场景=新场景(新组());
RGB RGB=panel.getBackground().getRGB();
颜色=Color.rgb(rgb.red、rgb.green、rgb.blue);
场景。设置填充(颜色);
ObservableList pieChartData=FXCollections.observableArrayList();
添加(新的PieChart.Data(“label1”,20));
添加(新的PieChart.Data(“label2”,20));
添加(新的PieChart.Data(“label3”,20));
添加(新的PieChart.Data(“label4”,20));
添加(新的PieChart.Data(“label5”,20));
图表=新的PieChart(pieChartData);
图表。setLegendSide(右侧);
((组)scene.getRoot()).getChildren().add(图表);
fxCanvas.setScene(场景);

有人能帮忙吗?

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


实用程序类依赖线程名称在UI线程中运行代码,因为JavaFX更改了正在运行的线程的名称,所以实用程序类将不再正常工作。

是否没有异常?否,没有异常,没有线程转储,没有日志,什么都没有:它只是冻结。如果执行线程转储,是否会看到卡住的线程(VisualVM)?也没有卡住的螺纹。