2012-02-27 3 views
0

확인 난 잠시 내가 3 파일 ... DataStruc.java을 가진이ArrayList를 자바 컴파일 오류가

같은 간단한 코드로 올 내 project..so 관련된 어떤 것을 실험을 자바의 ArrayList와 재생하려고 , DataStrucHand.java, 내가 시도 testcase1.java

DataStruc.java 


public class DataStruc { 
private String testString; 

public DataStruc(String s){ 
    this.testString = s; 
} 

public String getTestString() { 
    return testString; 
} 

public void setTestString(String testString) { 
    this.testString = testString; 
} 

public String toString(){ 
    return String.format("%s",testString); 
} 
} 


DataStrucHand.java 

import java.util.ArrayList; 

    public class DataStrucHand { 
private ArrayList<DataStruc> ds; 

public void addData(String ss){ 
    ds.add(new DataStruc(ss)); 
} 

public ArrayList<DataStruc> getData(){ 
    return ds; 
} 
} 


testcase1.java 
import java.util.*; 
public class testcase1 { 
public static void main(String args []){ 
    DataStrucHand dsh = new DataStrucHand(); 

    String gdata = "test"; 

    dsh.addData(gdata); 


    } 
    } 

그것을 컴파일이 오류

Exception in thread "main" java.lang.NullPointerException 
at DataStrucHand.addData(DataStrucHand.java:7) 
at testcase1.main(testcase1.java:8) 

가진 내가 실제로 어떤 문제가 있는지 알 수 있습니까? 나는 데이터를 추가 할 수 없습니다 ... 데이터를 추가하고 다른 testcase2.java를 생성하여 다시 검색하려고합니다 ...하지만 arraylist에 추가하는 데 문제가 있습니다 ... 내 목적은 임시 1 개의 프로그램으로 얻을 수 있지만 2 개의 다른 클래스로 실행될 수있는 특정 문자열을 유지하기위한 저장소.

답변

2

ds 필드에는 아무 것도 할당하지 않습니다.

public DataStrucHand() { 
    ds = new ArrayList<DataStruc>(); 
} 
: 당신이 그것을 새로운 당신이 방법을 선호 할 경우 생성자를 가질 수

private ArrayList<DataStruc> ds = new ArrayList<DataStruc>(); 

을 또는 :

DataStrucHand.java

import java.util.ArrayList; 

public class DataStrucHand { 
    private ArrayList<DataStruc> ds; //I am null because nothing is ever new'd up here... 

    public void addData(String ss){ 
     ds.add(new DataStruc(ss)); 
    } 

    public ArrayList<DataStruc> getData(){ 
     return ds; 
    } 
} 

이 라인으로 시도

+0

도와 주셔서 감사합니다 ... 여기 3.50AM과 같습니다. 잠자리가 필요합니다. – user1217609

+0

@ user1217609 : 잠을 자고 NPE를 디버깅하는 방법을 배우려면. 핵심은 예외를 던지는 줄의 변수를 확인한 다음 코드에서 다시 추적하여 null인지 확인하는 것입니다. –

+0

@ 모두 맥주가 필요해. –

0

ArrayList<DataStruc> 인스턴스를 ds에 입력해야합니다.

0

사용자는 ArrayList를 인스턴스화하지 않았습니다.

public class DataStrucHand { 
    private ArrayList<DataStruc> ds = new ArrayList<DataStruc>(); 

    public void addData(String ss){ 
     ds.add(new DataStruc(ss)); 
    } 
0

당신은 ds을 초기화 된 적이없는, 그래서 당신은 ds.add(new DataStruc(ss));ds = new ArrayList<DataStruc>(); 등의 DS를 초기화 DataStrucHand에 생성자를 추가 호출 할 때이 널이 쓰기.

0

DataStrucHand 클래스는 개인 필드 ds을 초기화하지 않으므로 을 호출하려고하면 NullPointerException으로 실패합니다.

실제로 클래스가 보이는 방식은 없습니다. dsnull 일 수 있습니다.

private final List<DataStruc> ds = new ArrayList<DataStruc>(); 

DataStrucHand 인스턴스 내부 ArrayListds로 구성되는이 방법은 null 결코 :이 문제를 해결하는

최단 방법은 제대로 ds를 초기화하는 것입니다.