Java空指针异常

Java空指针异常,java,nullpointerexception,Java,Nullpointerexception,我正在从事一个Java项目,目前有4个类(驱动程序、OrdersProcessor、Items和Purchase) 当我运行测试时,它告诉我在两行中有一个NullPointerException,旁边有(***)。 但是我不确定他们到底出了什么问题 public class OrdersProcessor { private static Items items = null; //added items = new Items(numOrders); public static

我正在从事一个Java项目,目前有4个类(驱动程序、OrdersProcessor、Items和Purchase) 当我运行测试时,它告诉我在两行中有一个NullPointerException,旁边有(***)。 但是我不确定他们到底出了什么问题

public class OrdersProcessor {

private static Items items = null;

//added
    items = new Items(numOrders);

public static void runOrderProcessor(BufferedReader file, int id) {
    double grandTotal = 0;
    int clientId = 1000 + id;
    try {
        System.out.println("Reading order for client with id: " + clientId);
        file.readLine();
        while (true) {
            grandTotal += items.buy(file.readLine().split(" ")[0], id); (*****)
        }
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    try {
        file.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    StringBuffer writeReport = new StringBuffer();
    writeReport.append("----- Order details for client with Id: "
            + clientId + " -----" + "\n");
    for (String bought : items.allItems()) {
        writeReport.append("Item's Name: " + items.getItem(bought)
                + items.getItem(bought).recipt(id));
        writeReport.append("Order Total: "
                + NumberFormat.getCurrencyInstance().format(grandTotal)
                + "\n");
    }

}
}

另一类:

public class Items {

private Map<String, Purchase> items;
private double grandTotal;
private int numOrders;

public Items(int numOrders) {
    this.numOrders = numOrders;
    reportOrders = new TreeMap <Integer, String>();
    items = new TreeMap<String, Purchase>();
    grandTotal = 0;

public double buy(String name, int id) {
    double price = getItem(name).purchaseItem(id); (*****)
    synchronized (lockGT) {
        grandTotal = grandTotal + price;
    }
    return price;
}
公共类项目{
私人地图项目;
私人双总;
私家侦探;
公共物品(整数){
this.numOrders=numOrders;
reportOrders=newtreemap();
items=新树映射();
grandTotal=0;
公共双重购买(字符串名称,整数id){
双倍价格=getItem(名称)。purchaseItem(id);(*****)
已同步(锁定){
总金额=总金额+价格;
}
退货价格;
}

在第一种情况下,
似乎从未设置为值并保持为空。
在第二种情况下,
getItem(name)
返回null,因此对
.purchaseItem(id)
的调用失败


要轻松调试,您可以在eclipse(或您使用的w.e)中设置断点,或在这些行之前向控制台打印一些日志消息,以查看对象的当前值。

项在第一个类中定义为null。您需要实例化它


对于第二个问题,您应该避免在一行中执行此操作。getItem()可能返回null。将其拆分为两个单独的语句,并添加null检查。代码安全或添加到确保开发人员返回内容(如果有)的测试中从一个方法。

调试器将与您同在,小徒弟您在哪里初始化
OrdersProcessor
中的
?我有私有静态项items=null;一开始,这还不够吗?