即時得到以下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);
}
}
}
});
}
在混合擺動/ FX線程問題可以討厭的和高度依賴於上下文(在我的FX有限的經驗)無論如何,請出示演示該問題,所以有人會嘗試追查一個SSCCE。 – kleopatra