4

Eclipse3.5に基づいてRCPアプリケーションを構築しています。oracle.comで見つけた2つの記事(1、2)のおかげで、円グラフを表示する実用的な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);

誰か助けてもらえますか?

4

1 に答える 1

2

問題は解決しました。これは、アプリ内の別の場所でスレッドの命名を微調整したことが原因でした。絶対にやってはいけないことがあります。スレッド名に過度に依存することもその 1 つです。:)

ユーティリティ クラスはスレッド名に依存して UI スレッドでコードを実行していましたが、JavaFX が実行中のスレッドの名前を変更するため、ユーティリティ クラスが正しく機能しなくなりました。

于 2013-03-22T14:45:17.307 に答える