ときどき (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)
fire the source forはあまり語らないので、それはあまり役に立ちませんfireDataChange()
。このinnerUpdate()
関数は、ダーティ フラグを設定するだけです。クラッシュはflagDataChange()
他の場所ではなく内部にあるため、実際にダウンストリームの原因はありません。他の 2 つの呼び出し と は、fireUpdate()
ある程度super.fireDataChange()
排除できます。これは、FireUpdate()
またはその下流のメソッドが原因である場合、Eclipse はクラスではなくその関数に言及するfireDataChange()
ためCircularBufferDataProvider
です。
@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;
}
私の考えはある種の競合ですが、グラフにポイントを追加する関数は 1 つしかなく、それはアプリケーション スレッドにあります。グラフはアプリケーション スレッドにも存在します。
更新: 完全なスタック トレース。
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)
考え?