2013-11-25 197 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); 

直到本部一切都準備得很充分了(我扯下了其餘代碼!)

現在到了棘手的部分!這是第二類:

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 ...我無法從ClassA的ArrayList中的值到ClassB的-.-

+2

您需要初始化'pMain'。 'ClassA pMail = new ClassA();' – MAV

+0

非常奇怪的代碼!你能發送完整的代碼嗎? –

+0

你可以粘貼堆棧跟蹤嗎? – lichengwu

回答

2

在第二類中創建的ClassA需要一個實例。我建議在主要方法中創建它,所以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; //在這裏沒有初始化的對象。

pMain.collCollect //這裏您得到NullPointerException異常

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

變化

ClassA pMain; 

ClassA pMain = new ClassA(); 
0

那麼你只需要聲明的變量pMain,但從未指定任何東西。因此,當您嘗試訪問它時,它將被初始化爲null並給你一個NullPointerException

您必須聲明它像ClassA pMain = new ClassA()或在其他地方指定一個值。如果你在其他地方賦值,一定要刪除直接初始化listContent

1

你的ClassA pMain未被實例化。您需要創建ClassA的實際情況是這樣的:

ClassA pMain = new ClassA(); 

既然你試圖讓這個類(collCollect)的公共財產,這將是明智的有一個存在過,無論是通過構造在ClassA中或通過在新創建的ClassA實例上調用某種方法。

+1

是的......那是錯誤之一......一定是失明;) – ZeroGS

0

而不是在你的類的頂部具有實例化的:

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

重寫構造你的第二個類,並通過它在那裏:

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

@Ben, 你可以將數組初始化代碼保存在ClassA的collCollectInit()中。在第二個類中創建ClassA對象作爲ClassA pMain = new ClassA(); pMain.collCollectInit();如果collCollect是ClassA中的公共或受保護的引用,則使用pMain.collCollect。請使用getter和setter方法來訪問類變量。

0

好吧,我一定是盲目的,不能初始化ClassB中的ClassA ...現在已經修復了。但是ListModelNew沒有任何內容打印爲「[]」,所以我認爲ClassA中的ArrayList沒有正確地將值傳遞給ClassB中的ArrayList listContent