簡體   English   中英

在Java中添加到Jlist的空指針異常

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM