2013-11-25 4 views
2

ArrayList에 문제가 있습니다. 내가해야 할 일은 ArrayList 값을 사용할 수 있도록 채워진 ArrayList를 다른 클래스에 전달하는 것입니다. 여기에 첫 번째 클래스의 단편이다 :이 제품의 모든 것이 매우 잘되어 가고다른 클래스에 ArrayList 전달

public ArrayList<String> collCollect = new ArrayList<String>(); 
for (int i = 0; i < ListModel.size(); i++) { 
     collCollect.add(ListModel.get(i).toString()); 
    } 
    System.out.println(collCollect); 

까지 (내가 코드의 나머지 부분을 제거!)

지금 까다로운 부분이 온다! 이 제 2 차 클래스 :

ClassA pMain; 
DecimalFormat f = new DecimalFormat("#0.00"); 
public ArrayList<String> listContent = new ArrayList<String>(pMain.collCollect); 
DefaultListModel<String> ListModelNew = new DefaultListModel<String>(); 

public static void main(String args[]) { 
for (int i = 0; i < listContent.size(); i++){ 
     ListModelNew.add(i, listContent.get(i)); 
    } 
} 

매번 ClassB가이 전 pMain의 배열에 대한 참조가 만들어지는 줄에서 NullPointerException이 얻을로드됩니다.

어떤 도움이 appriciated 될 것이다

... 난

+2

'pMain'을 초기화해야합니다. 'ClassA pMail = new ClassA(); ' – MAV

+0

아주 이상한 코드! 전체 코드를 보낼 수 있습니까? –

+0

스택 추적을 붙여 넣을 수 있습니까? – lichengwu

답변

2

ClassA 요구의 인스턴스가 두 번째 클래스에서 생성되는에 변화

ClassA pMain; 

public ArrayList<String> listContent = new ArrayList<String>(pMain.collCollect); 
                    ^__see here 

NullPointerException을을 얻고있다. 주 방법 내에서 작성하는 것이 좋습니다. ClassA은 두 번째 클래스에 대한 종속성이 아닙니다.

DecimalFormat f = new DecimalFormat("#0.00"); 
public ArrayList<String> listContent; 
DefaultListModel<String> ListModelNew = new DefaultListModel<String>(); 

public static void main(String args[]) { 
ClassA pMain = new ClassA(); 
listContent = new ArrayList<String>(pMain.collCollect); 
for (int i = 0; i < listContent.size(); i++){ 
     ListModelNew.add(i, listContent.get(i)); 
    } 
} 

더 리팩토링 할 수 있습니다

DecimalFormat f = new DecimalFormat("#0.00"); 
DefaultListModel<String> ListModelNew = new DefaultListModel<String>(); 

public static void main(String args[]) { 
ClassA pMain = new ClassA(); 
for (int i = 0; i < pMain.collCollect.size(); i++){ 
     ListModelNew.add(i, pMain.collCollect.get(i)); 
    } 
} 
+0

ClassA를 초기화하는 것을 잊어 버렸습니다 .- 이제는 ListModelNew에 아무 것도 추가되지 않습니다. StandardOutPrint에 나와있는 "[]"?!? 나는 점점 더 혼란스러워지고있다. – ZeroGS

3

ClassA pMain; // 여기에 개체를 초기화하지 ClassB가 -.-로를 ClassA의 ArrayList의에서 값을 얻을 수 없습니다입니다.

pMain.collCollect // 여기에 당신은

ClassA pMain = new ClassA(); 
0

그럼 당신은 변수 pMain를 선언하지만 아무것도 지정하지 않습니다. 따라서 null으로 초기화되며 액세스하려고하면 NullPointerException이 표시됩니다.

ClassA pMain = new ClassA()처럼 선언하거나 값을 다른 곳에 할당해야합니다. 값을 다른 곳에 할당하면 직접 초기화를 제거하십시오. listContent

1

ClassA pMain은 인스턴스화되지 않습니다. 이 같은를 ClassA의 실제 인스턴스를 생성해야합니다

ClassA pMain = new ClassA(); 

해당 클래스 (collCollect)의 공용 속성을 얻기 위해 노력하고 있기 때문에, 어느 생성자를 통해, 그것도 하나를 존재 가지고 제정신이 될 것입니다 ClassA의 새롭게 작성된 인스턴스의 메소드를 호출 해 호출합니다.

+1

예 ... 그건 실수 중 하나였습니다. – ZeroGS

0
하는 대신 클래스의 상단에있는 인스을 갖는

:

public ArrayList<String> listContent = new ArrayList<String>(pMain.collCollect); 

재정의 두 번째 클래스의 생성자, 그리고 거기에 전달할 :

public ClassB(ArrayList<String> pMain) { 
    this.listContent = pMain.collCollect; 
} 
0

@ 벤, 당신은 할 수 있습니다 배열 초기화 코드를 ClassA의 collCollectInit()에 보관하십시오. 두 번째 클래스에서는 ClassA 객체를 ClassA로 만듭니다. pMain = new ClassA(); pMain.collCollectInit(); collCollect가 ClassA의 public 또는 protected 참조 인 경우 pMain.collCollect를 사용합니다. 클래스 변수에 액세스하려면 getter 및 setter 메서드를 사용하십시오.

0

좋아, ClassA의 ClassA ...를 초기화하지 못하게해야합니다. 지금 수정되었습니다. 하지만 ListModelNew는 "[]"로 인쇄 된 내용이 없으므로 ClassA의 ArrayList가 ClassB의 ArrayList listContent에 값을 제대로 전달하지 못한다고 생각합니다.

관련 문제