[英]Null pointer exception for adding to a Jlist in Java
我正在嘗試添加一組稱為deliveryToAdd
的數據,但是當我單擊添加按鈕時,它將出現以下錯誤(它在輸出中給出很多行,但這是前幾行):
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at fastcourierservice.gui.AddDelivery.saveItem(AddDelivery.java:360)
at fastcourierservice.gui.AddDelivery.btnAddDeliveryActionPerformed(AddDelivery.java:265)
at fastcourierservice.gui.AddDelivery.access$100(AddDelivery.java:17)
at fastcourierservice.gui.AddDelivery$2.actionPerformed(AddDelivery.java:101)
當我單擊錯誤時,它將帶我到代碼中的這一行:
deliveryRecord.addDeliveryWithCost(deliveryToAdd, Cost);
這是在添加按鈕中調用的此方法的完整代碼:
private void saveItem() {
if (this.isSaveable()) {
int packageCount = Integer.parseInt(txtNoOfPackages.getText());
double costPerKG = Double.parseDouble(txtCostPerKg.getText());
double weight = Double.parseDouble(txtWeight.getText());
double Cost = costPerKG * weight;
String consignmentNumber = txtConsignmentNumber.getText();
Address colAddress = new Address(txtColAddressLine1.getText(), txtColAddressLine2.getText(), txtColCity.getText(), txtColPostcode.getText());
Address delAddress = new Address(txtDelAddressLine1.getText(), txtDelAddressLine2.getText(), txtDelCity.getText(), txtDelPostcode.getText());
Delivery deliveryToAdd = new Delivery(consignmentNumber, packageCount, weight, colAddress, delAddress);
//Test results
System.out.println(deliveryToAdd);
System.out.println(packageCount);
System.out.println(weight);
System.out.println(colAddress);
System.out.println(delAddress);
System.out.println(Cost);
deliveryRecord.addDeliveryWithCost(deliveryToAdd, Cost);
System.out.println(deliveryToAdd);
}
}
我用了System.out.println(); 要測試結果,deliveryToAdd將顯示consignmentNumber,其余顯示預期的結果。
這是該類的開始,在該類中聲明了deliveryRecord:
public class AddDelivery extends javax.swing.JFrame {
private DeliveryRecord deliveryRecord;
public void setDeliveryRecord(DeliveryRecord objTarget)
{
deliveryRecord = objTarget;
}
/**
* Creates new form AddDelivery
*/
public AddDelivery() {
initComponents();
}
這是DeliveryRecord類
public class DeliveryRecord implements IDeliveryRecord, Serializable {
private ArrayList<Delivery> deliveries;
private transient ArrayList<IObserver> observers = null;
private Customer owner;
private ISubjectImpl subjectDelegate;
/**
* Default Constructor creates an empty DeliveryRecord object that
* contains no deliveries. Required for serialisation
*/
public DeliveryRecord()
{
this.deliveries = new ArrayList<>();
this.subjectDelegate = new ISubjectImpl();
}
/**
* Constructor that creates a DeliveryRecord that is "owned" by the provided customer
* @param owner - A Customer object that "owns" the DeliveryRecord object
* that is being constructed
*/
public DeliveryRecord(Customer owner)
{
this();
this.owner = owner;
this.registerObserver(this.owner);
}
public ArrayList<Delivery> getDeliveryList()
{
ArrayList<Delivery> listResult = new ArrayList<>();
for(Delivery objCurrDelivery : this.deliveries)
{
listResult.add(objCurrDelivery);
}
return listResult;
}
@Override
public boolean addDelivery(Delivery newDelivery) {
boolean result = false;
if(null != newDelivery){
if(null == this.deliveries){
this.deliveries = new ArrayList<>();
}
if(this.deliveries.add(newDelivery))
{
result = true;
if(null != this.owner){
newDelivery.setCostPerKg(this.owner.getDeliveryCost());
}else{
newDelivery.setCostPerKg(Delivery.DEFAULTCOST);
}
newDelivery.registerObserver(this);
this.notifyObservers();
}
}
return result;
}
@Override
public boolean addDeliveryWithCost(Delivery newDelivery, Double costPerKg)
{
boolean result = false;
if(null != newDelivery && costPerKg >= Delivery.DEFAULTCOST){
if(null == this.deliveries){
this.deliveries = new ArrayList<>();
}
if(this.deliveries.add(newDelivery)){
result = true;
newDelivery.setCostPerKg(costPerKg);
newDelivery.registerObserver(this);
this.notifyObservers();
}
}
return result;
}
任何幫助,將不勝感激
哦,當您說它與我一起點擊時,感謝MadProgrammer。 我加了線
objWindow.setDeliveryRecord(deliveryList);
在我的主GUI上使用此按鈕方法:
private void btnAddDeliveryActionPerformed(java.awt.event.ActionEvent evt) {
AddDelivery objWindow = new AddDelivery();
objWindow.setDeliveryRecord(deliveryList);
objWindow.setVisible(true);
}
我還添加了以下行以在類的開頭聲明deliveryList:
public DeliveryRecord deliveryList;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.