gpt4 book ai didi

java - CircularBufferDataProvider addSample NullPointerException

转载 作者:行者123 更新时间:2023-12-02 04:16:01 25 4
gpt4 key购买 nike

我有时(在每 100 毫秒左右添加点的 3 分钟绘图上有几次)收到 NullPointerException,但我没有看到任何可能的原因。

java.lang.NullPointerException
at org.eclipse.nebula.visualization.xygraph.dataprovider.CircularBufferDataProvider.fireDataChange(CircularBufferDataProvider.java:474)
at org.eclipse.nebula.visualization.xygraph.dataprovider.CircularBufferDataProvider.addSample(CircularBufferDataProvider.java:155)
at myProject.XYGraphTransfer.addPoint(XYGraphTransfer.java:432)

这是代码示例。

trace1Provider = new CircularBufferDataProvider(true);
trace1Provider.setBufferSize(XYGraphTransfer.Graph_BufferEntries);
trace1Provider.setUpdateDelay(100);
Trace trace1 = new Trace("Time Plot", xyGraph.primaryXAxis, xyGraph.primaryYAxis, trace1Provider);
...
Long timeCurrent = Calendar.getInstance().getTimeInMillis();
Sample oSample = new Sample(timeCurrent, valueBase);
trace1Provider.addSample(oSample);

异常始终出现在 trace1Provider.addSample(oSample) 行。

oSample 永远不可能为 null,因此这种可能性不存在。

线索是实际的错误行,

at org.eclipse.nebula.visualization.xygraph.dataprovider.CircularBufferDataProvider.fireDataChange(CircularBufferDataProvider.java:474)

这对我没有多大帮助,因为为 fireDataChange() 触发 source 并没有说明太多。 innerUpdate() 函数仅设置一个脏标志。由于崩溃发生在 flagDataChange() 中,而不是其他地方,因此没有真正的下游原因。另外两个调用,fireUpdate()super.fireDataChange(),一个可以消除,因为如果 FireUpdate() 或一个方法下游就是原因,然后 Eclipse 会提及该函数,而不是 CircularBufferDataProvider 类中的 fireDataChange()

@Override
protected synchronized void fireDataChange()
{
if (updateDelay > 0)
{
innerUpdate();
if (!duringDelay)
{
Display.getCurrent().timerExec(updateDelay, fireUpdate);
duringDelay = true;
}
} else
super.fireDataChange();
}

@Override
protected void innerUpdate()
{
dataRangedirty = true;
}

我的想法是某种争用,但只有一个函数可以向图表添加点,而且是在应用程序线程中。该图也存在于应用程序线程上。

更新:完整的堆栈跟踪。

java.lang.NullPointerException
at org.eclipse.nebula.visualization.xygraph.dataprovider.CircularBufferDataProvider.fireDataChange(CircularBufferDataProvider.java:474)
at org.eclipse.nebula.visualization.xygraph.dataprovider.CircularBufferDataProvider.addSample(CircularBufferDataProvider.java:155)
at prjNetAccelerator.XYGraphTransfer.addPoint(XYGraphTransfer.java:432)
at prjNetAccelerator.AppGraphTransfer.addPoint(AppGraphTransfer.java:283)
at prjNetAccelerator.AppGraphTransfer.pushPoint(AppGraphTransfer.java:187)
at prjNetAccelerator.HtsLink.getStatusGui(HtsLink.java:456)
at prjNetAccelerator.HtsLink.getStatusBasic(HtsLink.java:568)
at prjNetAccelerator.ToolsTreeFolders.fetchFiles(ToolsTreeFolders.java:1351)
at prjNetAccelerator.TimerFilesFetch.run(TimerFilesFetch.java:81)
at java.util.TimerThread.mainLoop(Unknown Source)
at java.util.TimerThread.run(Unknown Source)

想法?

最佳答案

@AndyTurner 关于显示问题的说法是正确的。

我将代码更改为以下内容,运行了相当多的测试,这防止了异常。

if (null != Display.getCurrent())
trace1Provider.addSample(oSample);

我必须调查空显示问题。

关于java - CircularBufferDataProvider addSample NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33311488/

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