2013-03-15 73 views
4

我建立一個RCP應用程序,基於Eclipse 3.5。由於兩篇文章(12),我已經在oracle.com發現,我已經能夠實現工作RCP認爲,這顯示一個餅圖。的JavaFX - SWT互操作:申請凍結

不幸的是,如果我關閉視圖並重新打開它,那麼應用程序凍結,永不回來。

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

這是代碼。該視圖是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); 

誰能幫助?

+2

有沒有例外? – Dreen 2013-03-21 11:38:49

+0

不,沒有例外,沒有線程轉儲,沒有日誌,沒有任何東西:它只是凍結。 – 2013-03-22 10:49:17

+1

如果您執行線程轉儲(VisualVM),您是否看到卡住線程? – 2013-03-22 13:43:02

回答

2

這個問題就解決了。這是由一些線程命名調整在應用程序的其他地方引起的。肯定有一件事不應該做。過度依賴線程名稱就是其中之一。 :)

實用程序類是依靠線程的名字運行在UI線程代碼,因爲JavaFX的改變正在運行的線程的名稱,實用類將無法正常工作了。

+2

是什麼導致了這個問題,你是如何解決它的? – 2013-03-22 15:54:34