Collinwood
Mitglied
Hi, kann mir jemand sagen, wo hier (original in Zeile 174, hier 41) der Grund für die NPE ist?
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.
Code:
/**
* @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.