2013-10-31 29 views
1

即時得到以下NullpointerException,當我更新了很多JavaFX的圖表:JavaFx2:空指針在AbstractTimer

java.lang.NullPointerException 
    at com.sun.scenario.animation.AbstractMasterTimer.timePulseImpl(AbstractMasterTimer.java:366) 
    at com.sun.scenario.animation.AbstractMasterTimer$MainLoop.run(AbstractMasterTimer.java:289) 
    at com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:459) 
    at com.sun.javafx.tk.quantum.QuantumToolkit$9.run(QuantumToolkit.java:332) 
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
    at com.sun.glass.ui.win.WinApplication.access$100(WinApplication.java:17) 
    at com.sun.glass.ui.win.WinApplication$3$1.run(WinApplication.java:67) 
    at java.lang.Thread.run(Thread.java:744) 

和JavaFX的主題是要崩潰completeley。

即時通訊使用JavaFX從基於Swing應用程序,以顯示大約20圖表,誰是updatet以每10秒新數據。其中2個每2秒更新一次。 每個更新都在Platform.runLater()中運行。所以每10秒鐘就有20個運動員。 我已經閱讀過,JavaFX線程或EventQueue會被太多的runLater所淹沒。 所以我減少PLatform.runLater的調用3每隔10秒,一切都運行fine.But然後我不得不再次重做的20個電話,因爲我們不能從側面看,在那裏我可以收集所有的更新使用Java 1.7在3 runLater。 現在我們再次獲得Nullpointer。 是否由重載JavaFX線程引起的空指針?或者我在這裏有另一個問題?

以下是一個以Platform.runlater運行的更新方法的例子:

public static void updateBarChart(final ObservableList<XYChart.Series<String, Number>> oldData, final Map<String, Number> newData) { 

    Platform.runLater(new Runnable() { 

     @Override 
     public void run() { 
      logger.trace("ChartUpdater.updateBarChart"); 
      Series<String, Number> series = oldData.get(0); 
      ObservableList<Data<String, Number>> listData = series.getData(); 

      Set<String> keySet = newData.keySet(); 

      outer: for (String string : keySet) { 
       boolean exists = false; 

       for (Data<String, Number> data : listData) { 
        if (data.getXValue().equals(string)) { 
         data.setYValue(newData.get(string)); 

         Tooltip.install(data.getNode(), new Tooltip(data.getYValue().toString())); 
         exists = true; 
         continue outer; 
        } 
       } 

       if (!exists) { 
        final Data<String, Number> data = new BarChart.Data<String, Number>(string, newData.get(string)); 
        series.getData().add(data); 
        displayLabelForData(data); 
       } 
      } 

      double scale = 1.0; 

      if (series.getData().size() == 2) { 
       scale = 0.5d; 
      } 
      else if (series.getData().size() == 1) { 
       scale = 0.2d; 
      } 

      if (scale != 1.0d) { 
       for (Data<String, Number> dataObeject : series.getData()) { 
        dataObeject.getNode().setScaleX(scale); 
       } 
      } 
     } 
    }); 
} 
+0

在混合擺動/ FX線程問題可以討厭的和高度依賴於上下文(在我的FX有限的經驗)無論如何,請出示演示該問題,所以有人會嘗試追查一個SSCCE。 – kleopatra

回答

0

我發現了問題的根源。 旁邊的圖表我使用第三方儀表。 這些引起了Nullpointer。所以我踢了他們,現在一切運行良好。

0

如何更新您的JavaFX?我不確定哪些版本,但AbstractMasterTimer和許多其他來源已經改變。