Usecase:Eclipse EditorのcreatePartControl()内にFxCanvasを使用してJavaFx棒グラフを表示します。Eclipse上のJavaFX FXCanvas SWTエディタがjava.lang.IllegalStateExceptionをスローします
問題:RCPアプリケーションの初回起動時に、swtFxBarChart()がSWT Composite上のグラフを正常にプロットします。しかし、エディタウィンドウを閉じてfxCanvas.setScene(scene)を再び開くと、 throws java.lang.IllegalStateException:FXアプリケーションスレッドではありません。 currentThread = JavaFXのアプリケーションスレッド
コード:
private void swtFxBarChart(Composite composite) {
final FXCanvas fxCanvas = new FXCanvas(composite, SWT.NONE);
fxCanvas.setLayoutData(GridDataFactory.fillDefaults().grab(true, true).align(SWT.FILL, SWT.FILL).create());
fxCanvas.setLayout(GridLayoutFactory.fillDefaults().create());
final CategoryAxis xAxis = new CategoryAxis();
final NumberAxis yAxis = new NumberAxis();
final BarChart<String, Number> bc = new BarChart<String, Number>(xAxis, yAxis);
bc.setTitle("Example");
xAxis.setLabel("Status");
yAxis.setLabel("Count");
bc.setLegendVisible(false);
XYChart.Series series1 = new XYChart.Series();
final XYChart.Data completedSeries = new XYChart.Data("Completed", completedList().size());
series1.getData().add(completedSeries);
final XYChart.Data failedSeries = new XYChart.Data("Failed", failedList().size());
series1.getData().add(failedSeries);
Scene scene = new Scene(bc, 400, 400);
bc.getData().addAll(series1);
fxCanvas.setScene(scene);
}
環境:問題をデバッグした後jdk1.8.0_102