2Danke
ERLEDIGT
JA
JA
ANTWORTEN
3
3
ZUGRIFFE
504
504
EMPFEHLEN
-
08.08.10 19:27 #1
- Registriert seit
- Jul 2010
- Ort
- 35789 Weilmünster (Hessen)
- Beiträge
- 28
Hi, kann mir jemand sagen, wo hier (original in Zeile 174, hier 41) der Grund für die NPE ist?
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
/** * @Description Fill the table with Content from The WatchList. Old content gets deleted. */ public void fillTable(){ if(table != null){ table.removeAll(); table.setRedraw(true); } for(Article article : this.watchList){ Merchant lowestPriceMerchant=null; for (Merchant merchant : article.getMerchantList()) { if(lowestPriceMerchant==null){ lowestPriceMerchant=merchant; } int position=merchant.getPriceObjectList().size()-1; PriceObject priceObject = merchant.getPriceObjectList().get(position); int position2=lowestPriceMerchant.getPriceObjectList().size()-1; PriceObject lowestPriceObject = lowestPriceMerchant.getPriceObjectList().get(position2); if(priceObject.getPrice()<lowestPriceObject.getPrice()){ lowestPriceMerchant=merchant; } } TableItem tableItem = new TableItem(table, SWT.NONE); if(article.getAmazonAsin() != null) { tableItem.setText(0,article.getAmazonAsin()); } if(article.getArticleNumber() != null) { tableItem.setText(1,article.getArticleNumber()); } if(article.getAmazonModelNumber() != null) { tableItem.setText(2,article.getAmazonModelNumber()); } if(article.getGrossBestPrice() > 0.0) { tableItem.setText(3,article.getGrossBestPrice()+""); } int position=lowestPriceMerchant.getPriceObjectList().size()-1; PriceObject priceObject = lowestPriceMerchant.getPriceObjectList().get(position); tableItem.setText(4,priceObject.getPrice()+""); tableItem.setText(5,priceObject.getDate()+""); if(lowestPriceMerchant.getMerchantId() != null) { tableItem.setText(6,lowestPriceMerchant.getMerchantId()); } if(article.getDescription() != null) { tableItem.setText(7,article.getDescription()); } } }
Es geht darum, nach einem Prozessablauf aus einem anderen Thread (syncExec, mit synchronized getDisplay-Zugriff) eine Tabelle zeichnen zu lassen, bei der folgender Stacktrace vorliegt und das Programm die Grätsche macht, siehe pic im Anhang.
PS.: Wir haben uns schon saumäßig Gedanken gemacht, ob es wirklich am Threading liegen könnte, aber da fällt uns bald nichts mehr ein. Das Geschehen um den UI-Thread bei SWT mit syncExec und ThreadSafe-Methoden ist uns weithin bekannt.
-
Huhu,
Schon einmal mit einem Debugger drübergefahren und nachgesehen ob alle Variablen initialisiert (und nicht null) sind?
Also, an den Stellen wo es absemmelt Breakpoints setzen und los geht's!
Die Offenbarung kommt dann meist innerhalb weniger Sekunden.
Gruß,
Martin
-
08.08.10 23:00 #3
Sollte es wirklich die Zeile 41 sein, so gibt es nur zwei Möglichkeiten:
1. Die Variable lowestPriceMerchant ist null
2. Die Methode getPriceObjectList() des Objektes der Variable lowestPriceMerchant gibt null zurück
Den zweiten Fall kann man in deinem Code nicht überprüfen bzw. nachvollziehen, da die erforderliche Klasse Merchant fehlt und man deshalb nicht nachvollziehen kann, was da genau passiert.
Der erste Fall allerdings kann sehr wohl zurückverfolgt und nachvollzogen werden. In der Zeile 11 deklarierst du eine Variable lowestPriceMerchant vom Typ Merchant und diese willst du später auch nutzen. Zuvor wird diese jedoch initialisiert, im Idealfall mit einem Objekt, das den niedrigsten Preis hat. Soweit sogut, nur was ist mit dem Fall, dass es keine Merchants gibt, sprich die Liste, die von der Methode getMerchantList() zurückgegeben wird, leer ist? In dem Fall würde die Variable lowestPriceMerchant nie initialisiert werden und die NullPointerException ist vorprogrammiert.
Ich gehe stark davon aus, dass der erste Fall zutrifft. In dem Fall solltest du vor der eigentlichen Arbeit mit der Variable lowestPriceMerchant diese auf null überprüfen oder dafür sorgen, dass du immer mindestens ein Objekt in der MerchantList hast (vielleicht ein Dummyobjekt?). Ich rate zu der Überprüfung.Man sagt, das Schwert eines Samurai sei seine Seele ...
Mit den Beiträgen ist es wie mit Schwertern: Je besser die Rohstoffe sind und je öfter man diese bearbeitet, desto hochwertiger sind sie.
Das Schmieden ist eine Kunst; Das Schreiben auch ;)
-
09.08.10 18:38 #4
- Registriert seit
- Jul 2010
- Ort
- 35789 Weilmünster (Hessen)
- Beiträge
- 28
Vielen Dank für eure Hilfe! Akeshihiro hatte Recht, es liegt wirklich daran dass wir tatsächlich Artikel haben, zu denen es keinen Händler und damit auch keinen Preis gibt. Gelöst haben wir es nun ganz einfach, siehe Code. Aber da wäre ich ohne eure Hilfe gewiss sehr viel später erst drauf gekommen.
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
if(lowestPriceMerchant!=null) { if(lowestPriceMerchant.getPriceObjectList()!=null) { int position=lowestPriceMerchant.getPriceObjectList().size()-1; PriceObject priceObject = lowestPriceMerchant.getPriceObjectList().get(position); tableItem.setText(4,priceObject.getPrice()+""); tableItem.setText(5,priceObject.getDate()+""); } if(lowestPriceMerchant.getMerchantId() != null) { tableItem.setText(6,lowestPriceMerchant.getMerchantId()); } } else { tableItem.setText(4,"Kein Preis"); tableItem.setText(5,"kein Datum"); tableItem.setText(6,"Kein Händler"); }
Ähnliche Themen
-
[C] Pointer nach Funktionsaufruf nicht NULL
Von trench140 im Forum C/C++Antworten: 2Letzter Beitrag: 04.07.09, 17:13 -
Spielfeld mit JLabel Array, Null-Pointer-Exception beim Einfügen der JLabels
Von lucas66 im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 2Letzter Beitrag: 13.06.07, 12:25 -
System Null Reference Exception: Der Objektverweis wurde nicht auf eine Objektinstanz
Von magnificent im Forum .NET CaféAntworten: 2Letzter Beitrag: 17.07.06, 13:20 -
System Null Reference Exception: Der Objektverweis wurde nicht auf eine Objektinstanz
Von David Simon im Forum .NET ArchivAntworten: 4Letzter Beitrag: 09.05.05, 19:00 -
Finde den Grund für Laufzeitfehler nicht
Von sonotos im Forum C/C++Antworten: 1Letzter Beitrag: 02.11.04, 23:47





Zitieren
Login





