Java空指针异常
我正在从事一个Java项目,目前有4个类(驱动程序、OrdersProcessor、Items和Purchase) 当我运行测试时,它告诉我在两行中有一个NullPointerException,旁边有(***)。 但是我不确定他们到底出了什么问题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
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;一开始,这还不够吗?