Java Can';t从更新(观察者)方法添加/克隆arraylist
我正在使用Observer/Observable制作一个小程序,你可以输入你的ID、名字、姓氏和成绩,然后保存它。然后,您可以搜索是否找到此ID 我在这里做的是在三个类中创建一个ArrayList,Observer和Observable,以及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添
输入值
我有一个可观察的类,它是SujetConcret
,还有一个观察者类,它是Search
还有一个类EnteringValues
,我在save按钮中添加了一个侦听器:
EnteringValues.java
如您所见,我已将JTextfield
中的ID添加到ArrayList(String)ar
中,并使用s.setValue(ar)
将其添加到可观察类SujetConcret
SujetConcret.java(可观察)
问题:
我在这里面对的是在Search
类中,我正在尝试更新(在收到通知后)在Search
类中创建的ArrayList(String)ax
。我正在测试EnteringValues
ArrayListar
中的值是否使用for
循环添加到可观察的ArrayList中,并使用s.getValue().get(I)
打印Search
类中的所有值,并且它工作正常
但是在Observer的更新方法中,我尝试克隆它并添加它,但在运行程序时出现异常
我尝试在update
方法中不包含Observable
,因此我用ax.add(“1”)替换了此方法
它给了我IndexOutOfBoundsException
现在我可以意识到错误来自ArrayListax
而不是可观察的ArrayList。你得到了什么样的异常?@ChrisGong我有IndexOutOfBounds
然后我尝试向搜索类ArrayList添加一个值ax
并打印,它仅显示添加的值,而不显示从可观察的SujetConcret
arraylist导入的值。是否可以在打印ax
的位置添加代码?是否可以将for循环中的条件更改为i@ChrisGong我把它改成了I你有什么例外?@ChrisGong我有IndexOutOfBounds
然后我尝试向Search
class ArrayListax
添加一个值并打印它,它仅显示添加的值,而不显示从可观察的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));
}
}