Я делаю небольшую программу, используя Observer / Observable, в которую вы можете ввести свой идентификатор, имя, фамилию и оценку, а затем сохранить ее. Затем вы можете выполнить поиск, если этот идентификатор найден.
Я делаю ArrayList из трех классов: Observer и Observable и EnteringValues
.
У меня есть класс Observable. SujetConcret
и класс Observer Search
И есть класс EnteringValues
, который я добавил слушателем для кнопки сохранения:
EnteringValues. java
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());
}
}
}
Здесь, как вы можете видеть, я добавил идентификатор из JTextfield
в ArrayList (String) ar
и с помощью s.setValue(ar)
добавил его в класс Observable SujetConcret
SujetConcret. java (наблюдаемый)
public class SujetConcret extends Observable {
ArrayList<String> ar = new ArrayList<String>();
void setValue(ArrayList<String> arx){
ar=arx;
setChanged();
notifyObservers();
}
ArrayList getValue(){
return ar;
}
}
Поиск. java (наблюдатель)
public void update(Observable ob, Object o1) {
ax = (ArrayList<String>) ((SujetConcret)ob).getValue().clone();
}
Вызов ax
для определения, взяла ли ax
значения из Наблюдаемого массива в Search
классе
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));
}
}
Проблема:
Здесь я сталкиваюсь с классом Search
, я пытаюсь обновить (после получения уведомления) ArrayList (String) ax
, созданный в классе Search
, Я тестировал, чтобы увидеть, добавляются ли значения из EnteringValues
ArrayList ar
в Observable Arraylist с использованием for
l oop и печать всех значений в классе Search
с использованием s.getValue().get(i)
, и это работает.
Но в методе обновления для Observer я пытался его клонировать и добавить, но у меня возникают исключения при запуске программы.
Я пытался в методе update
не включать Observable
поэтому я заменил этот метод на ax.add("1")
, и он дал мне IndexOutOfBoundsException
, теперь я понял, что ошибка в ArrayList ax
, а не в Observable ArrayList.