我有一个问题,我在arrayList中丢失了数据。在类MPUComp中调用方法Refresh之后,进入类mpuChecker并调用updateTextArea。
这样,我将丢失MPUComp中arraylist中存在的数据。我做错了。我认为这与我上课的方式有关。如何正确保存此数据?
public class MPUComp extends JFrame {
{
private mpuChecker mC;
public ArrayList<String> oldTags = new ArrayList<String>();
public void menu()
{
//...
class MenuActionListener3 implements ActionListener {
public void actionPerformed(ActionEvent e)
{
mC = new mpuChecker();
mC.CheckMpu(path, textField.getText(),1);
setVisible(false);
}
}
class MenuActionListener4 implements ActionListener {
public void actionPerformed(ActionEvent e)
{
mC = new mpuChecker();
mC.CheckMpu(path2, textField_1.getText(),2);
setVisible(false);
}
}
public void refresh(String pane1) {
textArea_1.append(pane1 + "\n");
System.out.println(getOldTags().size());
System.out.println(oldTags.size());
//both print out zero when called second
}
public void updateTextArea(final String text) {
textArea_2.append(text + "\n");
oldTags.add(text);
System.out.println(oldTags.size());
//prints out the correct arraylist size
}
}
}
//second class which calls updateTextArea and refresh
public class mpuChecker {
private MPUComp mC = new MPUComp();
public void CheckMpu(String path, String searchToken, int form)
{
// Print the text to the appropriate text-area either 1 or 2
public void ary1(int path)
{
if(path == 1)
{
for(int l = 0; l < midTags.size(); l++)
{
mC.refresh(midTags.get(l));
}
}
if(path == 2)
{
for(int lk = 0; lk < midTags2.size(); lk++)
{
mC.updateTextArea(midTags2.get(lk));
}
}
}
}
最佳答案
跟进jpm的建议,为避免这种情况,您可以做
private MPUChecker mC = new MPUChecker();
在MPUComp中。这样,您只需实例化该mpuchecker一次。然后,两个ActionListener都可以使用该MPUChecker。
如果希望每个ActionListener都有自己的MPUChecker,则可以将其侦听器的创建移到这些内部类的主体中,如下所示
class MenuActionListener3 implements ActionListener {
MPUChecker menu3mC = new mpuChecker();
public void actionPerformed(ActionEvent e)
{
menu3mC.CheckMpu(path, textField.getText(),1);
setVisible(false);
}
}
另一方面,MPUChecker本身可能引用了错误的MPUComp,因为在初始化该对象时为MPUChecker创建了一个。除非这是预期的行为,否则您可以删除
private MPUComp mC = new MPUComp();
在MPUChecker中,将CheckMPU设置为静态,并为其添加一个附加参数:应该检查的MPUComp。