gpt4 book ai didi

JavaFX2 : Nullpointer in AbstractTimer

转载 作者:行者123 更新时间:2023-12-01 04:13:07 27 4
gpt4 key购买 nike

当我更新大量 JavaFX 图表时,我收到以下 NullpointerException:

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-Thread 将彻底崩溃。

我使用基于 Swing 的应用程序中的 JavaFX 来显示大约 20 个图表,这些图表每 10 秒更新一次新数据。其中 2 个每 2 秒更新一次。每个更新都在 Platform.runLater() 中运行。所以每 10 秒 20 runLaters。我读到,JavaFX-Thread 或 EventQueue 将被太多的 runLater 淹没。所以我将 PLAtform.runLater 的调用减少到每 10 秒 3 次,一切都运行良好。但是后来我不得不再次重做 20 次调用,因为我们不能从侧面使用 Java 1.7,我可以在其中收集所有更新3 运行后。现在我们又得到了空指针。空指针是由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);
}
}
}
});
}

最佳答案

更新您的 JavaFX 怎么样?我不确定哪些版本,但 AbstractMasterTimer 和许多其他来源已经发生了变化。

关于JavaFX2 : Nullpointer in AbstractTimer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19704459/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com