2015-10-18 775 views
-1

我已經定義了一個全局ArrayList itemList,它可以通過一個不同的類來訪問。我已通過actionPerformed爲其分配值,並且可以在該方法中訪問它。但是,當我嘗試訪問方法之外的數據時,它將變爲null。我如何設置和訪問方法之外的數據?這是代碼。訪問全局變量inPerformed

public void addMainBtn() { 
    for(int i=0;i < mainMenu.size();i++) { 
     mainPane.setLayout(new GridLayout(0,1)); 
     JButton mainBtn = new JButton(mainMenu.get(i).item_name+" - "+mainMenu.get(i).item_price); 
     //mainAction mainBtnAct = new mainAction(mainMenu.get(i).item_name, mainMenu.get(i).item_price); 
     mainBtn.addActionListener(this); 
     mainPane.add(mainBtn); 
    } 
} 

public void actionPerformed(ActionEvent e) { 
    String str = e.getActionCommand(); 
    String[] outputItem = str.split("-"); 
    double outputPrice = Double.parseDouble(outputItem[1]); 
    storeArray.itemList.add(outputItem[0]); 
    storeArray.priceList.add(outputPrice); 
} 

public void printall() { 
    for (int i = 0; i < test.size(); i++) { 
     System.out.println(storeArray.itemList.get(i).toString()); 
    } 
} 
+0

基本上這是第一種方式的糟糕設計。直接訪問不同課程中的字段可將您與該領域的實施聯繫起來。此外,你在這裏混合圖層。一層處理UI事件;然後有一個層管理你正在處理的數據。至少:將另一個班級變成一個單身人士;並在其上放置(同步)方法,如「添加新項目」。並編寫單元測試;那麼您可以確保每個組件實際上按預期工作,然後再開始將「更大」的組件組合在一起。 – GhostCat

+0

最後 - 如果你想得到有用的答案,那麼你必須提供更多的代碼。這裏沒有人知道storeArray是從哪裏來的;它是如何初始化的;以及itemList和priceList如何初始化。 – GhostCat

+0

謝謝Jagermeister, – RLim

回答

1

如果沒有正確的同步,你不應該使用來自兩個不同線程的ArrayList。改爲使用ArrayBlockingQueue並定義將其存儲爲最終的變量。