Java Can';t从更新(观察者)方法添加/克隆arraylist

Java Can';t从更新(观察者)方法添加/克隆arraylist,java,arraylist,observable,Java,Arraylist,Observable,我正在使用Observer/Observable制作一个小程序,你可以输入你的ID、名字、姓氏和成绩,然后保存它。然后,您可以搜索是否找到此ID 我在这里做的是在三个类中创建一个ArrayList,Observer和Observable,以及输入值 我有一个可观察的类,它是SujetConcret,还有一个观察者类,它是Search 还有一个类EnteringValues,我在save按钮中添加了一个侦听器: EnteringValues.java 如您所见,我已将JTextfield中的ID添

我正在使用Observer/Observable制作一个小程序,你可以输入你的ID、名字、姓氏和成绩,然后保存它。然后,您可以搜索是否找到此ID

我在这里做的是在三个类中创建一个ArrayList,Observer和Observable,以及
输入值

我有一个可观察的类,它是
SujetConcret
,还有一个观察者类,它是
Search

还有一个类
EnteringValues
,我在save按钮中添加了一个侦听器:

EnteringValues.java

如您所见,我已将
JTextfield
中的ID添加到ArrayList(String)
ar
中,并使用
s.setValue(ar)
将其添加到可观察类
SujetConcret

SujetConcret.java(可观察)

问题:

我在这里面对的是在
Search
类中,我正在尝试更新(在收到通知后)在
Search
类中创建的ArrayList(String)
ax
。我正在测试
EnteringValues
ArrayList
ar
中的值是否使用
for
循环添加到可观察的ArrayList中,并使用
s.getValue().get(I)
打印
Search
类中的所有值,并且它工作正常

但是在Observer的更新方法中,我尝试克隆它并添加它,但在运行程序时出现异常


我尝试在
update
方法中不包含
Observable
,因此我用
ax.add(“1”)替换了此方法
它给了我
IndexOutOfBoundsException
现在我可以意识到错误来自ArrayList
ax
而不是可观察的ArrayList。

你得到了什么样的异常?@ChrisGong我有
IndexOutOfBounds
然后我尝试向
搜索
类ArrayList添加一个值
ax
并打印,它仅显示添加的值,而不显示从可观察的
SujetConcret
arraylist导入的值。是否可以在打印
ax
的位置添加代码?是否可以将for循环中的条件更改为
i@ChrisGong我把它改成了
I你有什么例外?@ChrisGong我有
IndexOutOfBounds
然后我尝试向
Search
class ArrayList
ax
添加一个值并打印它,它仅显示添加的值,而不显示从可观察的
SujetConcret
arraylist导入的值。是否可以在打印
ax
的位置添加代码?是否可以将for循环中的条件更改为
i@ChrisGong我把它改成了
I
public class saveListener implements ActionListener {
public void actionPerformed (ActionEvent event){
    try {
        FileWriter fileWriter = new FileWriter(file, true);
        tid.write(fileWriter);
        fileWriter.write("\n");
        fileWriter.close();
        ar.add(tid.getText());
        s.setValue(ar);

    } catch (IOException ex) {
        System.out.println(ex.getMessage());
        }
    }   
}
public class SujetConcret extends Observable {
    ArrayList<String> ar = new ArrayList<String>();

void setValue(ArrayList<String> arx){
    ar=arx;
    setChanged();
    notifyObservers();
}

ArrayList getValue(){
    return ar;
   }
}
public void update(Observable ob, Object o1) {
        ax = (ArrayList<String>) ((SujetConcret)ob).getValue().clone();
}
ArrayList<String> ax = new ArrayList<String>(); //Under public class Search extends..
Search(SujetConcret s){
    this.s=s;
        for(int i=0; i<s.getValue().size();i++){
        System.out.println(ax.get(i));
    }
}