在actionPerformed中访问全局变量

时间:2015-10-18 13:02:20

标签: java multithreading variables global

我定义了一个全局ArrayList itemList,可以通过不同的类访问它。我已经通过actionPerformed为其分配了值,并且可以在方法中访问它。但是,当我尝试访问方法之外的数据时,它变为null。如何设置和访问方法外的数据?这是代码。

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());
    }
}

1 个答案:

答案 0 :(得分:1)

如果没有正确的同步,则不应使用来自两个不同线程的ArrayList。请改用ArrayBlockingQueue并定义将其存储为final的变量。