gpt4 book ai didi

java - 数组列表中丢失数据

转载 作者:行者123 更新时间:2023-11-30 04:53:40 25 4
gpt4 key购买 nike

我遇到了一个问题,即我丢失了 arrayList 中的数据。在调用 MPUComp 类中的 Refresh 方法后,我进入 mpuChecker 类并调用 updateTextArea。

通过这样做,我丢失了 MPUComp 中数组列表中存在的数据。我做错了什么。我认为这与我如何称呼类(class)有关。如何正确保存这些数据?

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 创建了一个 MPUComp。除非这是预期的行为,否则您可以删除

private MPUComp mC = new MPUComp();

从 MPUChecker 中,使 CheckMPU 静态并为其提供一个附加参数:它应该检查的 MPUComp。

关于java - 数组列表中丢失数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9269428/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com