2017-12-20 20 views
-1

도움이 필요합니다. 4-5 시간 동안 노력한 후에, 나는 잃어버린 것이라고 생각했습니다. 같은 제목을 가지고 있지만 도움이되지 않은 다른 스레드가 2 개 있다는 것을 알고 있습니다. T.T목록에 개체를 추가 할 때 NullPointerException이 발생합니다

나는 그것을 고치는 법을 모른다. 그리고 나는 지금 미쳤다. 그래서 누군가가이 문제로 나를 도울 수 있기를 바랍니다.

누군가가 내가 그것을 고치고 내가 나쁘게 도대체 나에게 무엇을했는지 설명 할 수 있다면 나는 미래에 그것을 다시하지 않을 것이다. 나는 행복 할 것이다.

저는 OrderMapper에서 Main 함수를 만들려고하는 곳에서 3 가지 클래스를 사용하여 shopcart를 CustomerOrder 객체라고합니다. 그런 다음 목록에 Add 함수를 통해 OrderDetails 객체를 추가하지만 NullPointerException이 계속 발생합니다.

OrderDetails의 클래스 :

package model.domain; 

public class OrderDetails { 
    private int id; 
    private int bookid; 
    private int amount; 

    public OrderDetails() { 
    } 

    public OrderDetails(int id, int bookid, int amount) { 
     this.id = id; 
     this.bookid = bookid; 
     this.amount = amount; 
    } 

    public OrderDetails(int bookid, int amount) { 
     this.bookid = bookid; 
     this.amount = amount; 
    } 

    public int getId() { 
     return id; 
    } 

    public int getBookid() { 
     return bookid; 
    } 

    public void setBookid(int bookid) { 
     this.bookid = bookid; 
    } 

    public int getAmount() { 
     return amount; 
    } 

    public void setAmount(int amount) { 
     this.amount = amount; 
    } 

} 

인 CustomerOrder 클래스 :

package model.domain; 

import java.util.Date; 
import java.util.List; 

public class CustomerOrder { 
    private int id; 
    private int customerid; 
    private List<OrderDetails> orderDetails; 

    public CustomerOrder() { 
    } 

    public CustomerOrder(int id, int customerid, List<OrderDetails> orderDetails) { 
     this.id = id; 
     this.customerid = customerid; 
     this.orderDetails = orderDetails; 
    } 

    public CustomerOrder(int customerid, List<OrderDetails> orderDetails) { 
     this.customerid = customerid; 
     this.orderDetails = orderDetails; 
    } 

    public int getId() { 
     return id; 
    } 

    public int getCustomerid() { 
     return customerid; 
    } 

    public void setCustomer(int customerid) { 
     this.customerid = customerid; 
    } 

    public List<OrderDetails> getOrderDetails() { 
     return orderDetails; 
    } 

    public void setOrderDetails(List<OrderDetails> orderDetails, OrderDetails od) { 
     orderDetails.add(od); 
     this.orderDetails = orderDetails; 
    } 

    public void addDetails(int bookid, int amount){ 
     OrderDetails od = new OrderDetails(); 
     od.setBookid(bookid); 
     od.setAmount(amount); 
     this.orderDetails.add(od); 
    } 



// public void addDetails(OrderDetails od){ 
//  this.orderDetails.add(od); 
// } 


    //addOrderline /addDetails 
    // 
      //od.setOne(this.ono) 
      //orderdetails.add(ad) 

    //arraylist<orderdetail> getDetails(){ 
    // return orderDetails; 
    //} 

} 

OrderMapper 클래스 : 내가 처음 널은 널에서 아는 곳

package model.domain; 

import java.util.ArrayList; 
import java.util.List; 

public class OrderMapper { 
    public CustomerOrder createShopcart(int customerid, List<OrderDetails> orderDetails){ 
     return (new CustomerOrder(customerid, orderDetails)); 
    } 

    public static void main(String[] args) { 
      OrderMapper om = new OrderMapper(); 

      OrderDetails ed = new OrderDetails(1, 2); 

      //List<OrderDetails> orderDetails = null; 
//   // orderDetails = ed; 
      //orderDetails.add(0, ed)); 

      CustomerOrder shopcart = new CustomerOrder(); 

      System.out.println(shopcart.getOrderDetails()); 

      shopcart.setCustomer(1); 
      shopcart.addDetails(1, 3); 
      shopcart.addDetails(3, 2); 
      shopcart.addDetails(2, 2); 

      System.out.println(shopcart.getOrderDetails()); 

//   CustomerOrder shopcart = om.createShopcart(1, null); 
//   System.out.println(shopcart.getOrderDetails()); 
//   OrderDetails od = new OrderDetails(1, 2); 

//   shopcart.setOrderDetails(null, od); 

//   System.out.println(shopcart.getOrderDetails()); 
//   shopcart.setCustomer(1); 
//   shopcart.addDetails(1, 1); 

    } 

} 

내가 오류는 이것이다 내가 설정하지만 추가하고 나에게 NullPointerException을 가져옵니다. 당신이 shopcart.addDetails 전화 따라서 때 ... 당신은 당신의 객체에게 목록을 제공하지

null 
Exception in thread "main" java.lang.NullPointerException 
    at model.domain.CustomerOrder.addDetails(CustomerOrder.java:68) 
    at model.dataaccess.OrderMapper.main(OrderMapper.java:155) 
+0

안녕 Blogbeard, 나는 그것을 읽었습니다하지만 난 어디로 나는 아직도하지 않는 잘못된. 나는 다른 것들을 시도한 후에도 내 코드를 고칠 수 없다. : | – user9120338

+0

'new CustomerOrder()'는'orderDetails'를'null'으로 설정하고'id'와'customerid'를'0'으로 설정합니다. 아마 그 생성자를 지우고 항상이 필드들을 적절히 초기화하는 다른 생성자를 사용해야 만합니다. – dimo414

+0

또는'private List orderDetails = new ArrayList <>();'를 사용하면 기본적으로 필드가 null이 아닌 값으로 초기화됩니다. – dimo414

답변

1

(1, 1); 나는 많은 것들을 시도했지만 아무도 도움이되지 shopcart 객체가 유효한 목록 객체로 인스턴스화되지 않기 때문에 null 포인터 예외가 발생합니다.

CustomerOrder shopcart = new CustomerOrder(); //no list given 

당신이 좋아하는 전화 createShopcart (INT의 CustomerID를, 목록 OrderDetails의)를 생성하는 기능을 사용해보십시오이

CustomerOrder shopcart = new CustomerOrder(0, new ArrayList<OrderDetails>()); 
+0

안녕하세요 @RAH_Muh_Taz, 정말 고마워요. 구문과 newbeginner 오류가 혼합되어 있습니다. 나는 새로운 ArrayList 를 시도했지만 끝에()를 추가하지 않았다. 이상하게 보였고 그것을 지웠다. 도와 줘서 고마워. 그래서 내 shopcart를 인스턴스화 할 때 유효한 목록 개체를 기억해야한다고 말하고있는 것입니다. 나중에 CustomerOrder 객체에 추가 할 수 없습니까? – user9120338

+0

나중에 추가 할 수 있지만 추가 불필요한 작업 인 your list! = null인지 확인하는 다른 방법으로 더 많은 검사를해야합니다. CustomerOrder에는 멤버 변수의 일부로 목록이 포함되어 있으므로 null 포인터 예외를 피하기 위해 목록을 작성시 제공하는 것이 가장 좋습니다.나중에 anotehr 기능으로 원한다면 목록을 대체 할 수 있지만 생성시 클래스의 모든 항목이 제대로 초기화되도록하려는 경우 –

+0

멋지다. 고마워. 나는 그 물건에 대해 더 많이 읽어야하는 것 같다. 나를 미치게 만들었습니다. 당신이 사람들을 도와 준 후에 나는 아무것도 아닌 것처럼 계속했습니다. 나는이 교훈을 잊지 않고 그것을 기억하기를 바랍니다. 도움에 다시 한번 감사드립니다. :) – user9120338