J'ai parfois (quelques fois sur une parcelle qui s'étend de 3 minutes avec des points ajoutés toutes les 100ms environ) recevoir un NullPointerException
, mais je ne vois aucune cause possible.CircularBufferDataProvider addSample 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)
Voici l'exemple de code.
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);
L'exception est toujours sur la ligne trace1Provider.addSample(oSample)
.
oSample
ne peut jamais être null
, de sorte que cette possibilité soit désactivée.
Un indice est la ligne d'erreur réelle,
at org.eclipse.nebula.visualization.xygraph.dataprovider.CircularBufferDataProvider.fireDataChange(CircularBufferDataProvider.java:474)
Cela ne me permet pas beaucoup, parce que le feu de la source pour fireDataChange()
ne dit pas grand-chose. La fonction innerUpdate()
, définit simplement un drapeau sale. Comme le crash est en flagDataChange()
et pas ailleurs, il n'y a pas vraiment de cause en aval. Les deux autres appels, fireUpdate()
et super.fireDataChange()
, on peut en quelque sorte éliminer, car si FireUpdate()
ou une méthode en aval de cela était la cause, alors Eclipse mentionnerait cette fonction, pas fireDataChange()
dans la classe CircularBufferDataProvider
. Ma pensée est une sorte de contention, mais il n'y a qu'une seule fonction qui ajoute des points au graphique et qui est dans le thread d'application. Le graphique existe aussi sur le thread d'application.
MISE À JOUR: Trace de pile complète.
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)
Pensées?
'Display.getCurrent()' - peut-il jamais retourner une valeur nulle? par exemple, de manière transitoire, si l'affichage change? –
Cela pourrait-il être pertinent? https://wiki.eclipse.org/FAQ_How_do_I_get_a_Display_instance%3F –
@AndyTurner C'est une bonne idée. J'ai vu cela et immédiatement rejeté Display.getCurrent() retournant NULL, mais vous avez raison. Quoi d'autre? Je pensais comment est-il possible que l'affichage actuel retourne jamais nul. J'effectuerais un changement dans ce code pour mettre un test, mais Nebula ne m'appartient pas. –