2017-04-12 16 views
0

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

答えて

0

、私はJavaFXのアプリ自体にエディタが閉じ初めて処分になることが判明し、したがって以下の例外がスローされます

java.lang.IllegalStateException:FXアプリケーションスレッドではありません。 currentThread = JavaFXのアプリケーションスレッド はエディタで再び開き

ソリューションにIllegalStateExceptionが解決: -

falseにImplicitExitを設定FxCanvas

Platform.setImplicitExit(false); 

を作成する前に、コードの以下の行を追加してくださいアプリケーションになりアプリケーションが終了を呼び出すまで、最後のウィンドウが閉じられた後でも正常に実行され続けます。デフォルト値はtrueです。

これは私の問題を解決しました。

関連する問題