简体   繁体   English

我没有在“ main”线程中获取“ java.lang.NullPointerException异常”,即使没有将值设置为null

[英]I am getting “Exception in thread ”main" java.lang.NullPointerException even though no values are set to null

public class ParkedCar {
    private String make;
    private String model;
    private String color;
    private String licenseNum;
    public ParkedCar(String make, String model, String color, String licenseNum) {
        this.make = make;
        this.model = model;
        this.color = color;
        this.licenseNum = licenseNum;
    }
    public void setMake(String ma) {
        make = ma;
    }
    public void setModel(String mo) {
        model = mo;
    }
    public void setColor(String c) {
        color = c;
    }
    public void setLicenseNum(String ln) {
        licenseNum = ln;
    }
    public String getMake() {
        return make;
    }
    public String getModel() {
        return model;
    }
    public String getColor() {
        return color;
    }
    public String getLicenseNum() {
        return licenseNum;
    }
}

public class ParkingMeter {
    private ParkedCar parkedcar;
    private int timePurchased;
    private int timeParked;
    public ParkingMeter(ParkedCar parkedcar, int timePurchased, int timeParked) {
        this.parkedcar = parkedcar;
        this.timePurchased = timePurchased;
        this.timeParked = timeParked;
    }
    /*public ParkingMeter (ParkedCar parkedcar) {
        this.parkedcar = null;
    }*/
    public void setTimePurchased(int timePurchased) {
        this.timePurchased = timePurchased;
    }
    public int getTimePurchased() {
        return timePurchased;
    }
    public void setTimeParked(int timeParked) {
        this.timeParked = timeParked;
    }
    public int getTimeParked() {
        return timeParked;
    }
    public int TimeExpired() {
        if (timeParked > timePurchased) 
            return timeParked - timePurchased;
        else    
            return 0;
    }
    public String toString() {
        return "Make: " + parkedcar.getMake() + "\nModel: " + parkedcar.getModel() + "\nColor: " + parkedcar.getColor() + "\nLicense Number: " + parkedcar.getLicenseNum();
    }
}

public class ParkingTicket {
    private ParkingMeter parkingmeter;
    public ParkingTicket(ParkingMeter parkingmeter) {
        this.parkingmeter = parkingmeter;
    }
    public int TicketCost() {
        if (parkingmeter.getTimeParked() > parkingmeter.getTimePurchased()) {
            if (parkingmeter.getTimeParked() <= 60)
                return 25;
            else 
                return 25 + (10*(parkingmeter.TimeExpired())/60);
        }
        else 
            return 0;
    }                           
}

public class PoliceOfficer {
    private String OfficerName;
    private int OfficerNum;
    private ParkingMeter pm;
    private ParkingTicket pt;
    public PoliceOfficer(ParkingTicket pt, String OfficerName, int OfficerNum) {
        this.OfficerName = OfficerName;
        this.OfficerNum = OfficerNum;   
    }
    public void setOfficerName(String OfficerName) {
        this.OfficerName = OfficerName;
    }
    public void setOfficerNum(int OfficerNum) {
        this.OfficerNum = OfficerNum;
    }
    public String getOfficerName() {
        return OfficerName;
    }
    public int getOfficerNum() {
        return OfficerNum;
    }
    public boolean isExpired() {
        if (pm.getTimeParked() > pm.getTimePurchased())
            return true;
        else
            return false;
    }
    public String toString() {
        return "Officer Name: " + OfficerName + "\nOfficer Number: " + OfficerNum + "\n" + "\nFine: " + pt.TicketCost();    
    }
}

public class ParkingTicketDemo {
    public static void main(String[] args) {
        ParkedCar pc = new ParkedCar("Toyota", "Camry", "Blue", "BXZ 152");
        System.out.println(pc);
        ParkingMeter pm = new ParkingMeter(pc, 60, 120);
        ParkingTicket pt = new ParkingTicket(pm);
        PoliceOfficer po = new PoliceOfficer(pt, "Roger", 337);
        System.out.println(po);
    }
}

I have been trying to create a program to create and issue a parking ticket and have run into the problem where it compiles, but when it runs it gives out the error message Exception in thread "main" java.lang.NullPointerException. 我一直在尝试创建一个程序来创建和发行停车票,并遇到了编译该程序的问题,但是在运行该程序时,它在线程“ main” java.lang.NullPointerException中发出了错误消息Exception。 I am a fairly new programmer and this is the first time I have encountered the problem so I have yet fully understand it and cannot seem to fix it. 我是一个相当新的程序员,这是我第一次遇到此问题,因此我尚未完全理解它,而且似乎无法解决。 i have tried reading other things online, but just do not understand I would love a simple explaination to my problem. 我曾尝试过在线阅读其他内容,但只是不明白,我希望对我的问题做一个简单的解释。

The NPE happens because of these two lines: NPE之所以发生是因为以下两行:

PoliceOfficer po = new PoliceOfficer(pt, "Roger", 337);
System.out.println(po);

In your constructor for PoliceOfficer , you don't do anything with the ParkingTicket instance pt . PoliceOfficer的构造函数中,您不对ParkingTicket实例pt做任何事情。

public PoliceOfficer(ParkingTicket pt /* not set anywhere */, String OfficerName, int OfficerNum) {
    this.OfficerName = OfficerName;
    this.OfficerNum = OfficerNum;   
}

The fields ParkingMeter pm and ParkingTicket pt remain null since you haven't initialized them. 由于尚未初始化, ParkingMeter pmParkingTicket pt字段保持为空。

Then you try to print the object: System.out.println(po); 然后尝试打印该对象: System.out.println(po); What this does is call toString() on po , it is equivalent to this: 这是在po上调用toString() ,它等效于此:

System.out.println(po.toString());

Now because your toString() 现在因为您的toString()

public String toString() {
    return "Officer Name: " + OfficerName + "\nOfficer Number: " + OfficerNum + "\n" + "\nFine: " + pt.TicketCost();    
}

uses the pt , it creates a NullPointerException, since pt is null. 使用pt ,它会创建NullPointerException,因为pt为null。

Since you are already passing a ParkingTicket instance into the constructor for PoliceOfficer , use that instance to assign its member variable pt . 既然你已经传递ParkingTicket到例如构造为PoliceOfficer ,使用该实例转让其成员变量pt

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 我为什么会收到错误消息:“线程“ main”中的异常“ java.lang.NullPointerException” - why am i getting error: “Exception in thread ”main“ java.lang.NullPointerException” 为什么我得到“线程中的异常”主“java.lang.NullPointerException”? - Why am I getting “Exception in thread ”main“ java.lang.NullPointerException”? 在线程“main”中获取错误异常 java.lang.NullPointerException - Getting error exception in thread "main" java.lang.NullPointerException 在线程“主”中获取异常java.lang.NullPointerException - Getting Exception in thread “main” java.lang.NullPointerException 从休眠中在线程“ main”中获取异常java.lang.NullPointerException - getting Exception in thread “main” java.lang.NullPointerException from hibernate 在线程“主”中获取异常java.lang.NullPointerException错误 - Getting Exception in thread “main” java.lang.NullPointerException error , 线程“main”中的异常 java.lang.NullPointerException - ,Exception in thread "main" java.lang.NullPointerException 线程“ main”中的异常java.lang.NullPointerException - Exception in thread “main” java.lang.NullPointerException “线程“ main”中的异常java.lang.NullPointerException” - “Exception in thread ”main“ java.lang.NullPointerException” 线程“ main”中的异常java.lang.NullPointerException - Exception in thread “main” java.lang.NullPointerException
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM