Проблем с Java Serialization и Deserialization
Имам един проблем които не знам как да разреша. Работя по Java applicatoin която да се използва за просто домашно счетоводство. За запазване на данните избрах да използвам сериализация но когато тествах програмата забелязах че при регистриране на повече от един потребител със съответните име и парола и после при влизането на който и от двамата потребители чрез име и парола в конзолата се изписва Unknown Source и се показва че има грешка на часта от кода където се проверяват записаните потребители със съответ име и парола въведени при влизане. За да записвам самите данни за потребителите съм създал клас съдържащ две String променливи в конструктора една за името и една за паролата а при сериализацията първо записвам саответната променлива като ArreyList след това добавям потребителя чрез съответната променлива от класа в ArreyList-а а след това съсдавам масив от променливата в този клас с дължина променлива която задължително сериализирам в края на процеса за регистрация както и другата int променлива която използвам за да не се припокриват променливите в масива чиято стоиност казвам че е равна на първата променлива от ArreyList-а. След което увеличавам стоиноста на променлиите които използвам int които използвам при вземане определена променлива от масива и другата с която определям дължината му. След което създавам ArreyList от Objects в които поставям двете int променливи както и масива. След което създавам променлева FileOutputStream с аргомент името на ваила в които се записва със съответното укончание като аргомента е в кавички.
След това създавам променлива ObjectOutputStream с аргомент името на прроменливата FileOutputStream след което задавам на променливата ObjectOutputStream да запише ArreyList-а от обекти. Този процес със създаването на ObjectOutputStream и FileOutputStream се случва в try а за catch използвам IOException. След което пращам потребителя към друг клас който служи като Вход или Login където съм написал подобен на предишния код но вместо със ObjectOutputStream и FileOutputStream с FileInputStream и ObjectInputStream. Създал съм предварително преди този try ArreyList от обекти а след създаването на FileInputStream и ObjectInputStream още в try създавам че новата стоиност на този лист е равна на стоноста на листа записан във файл. След което взимам последователно стоиностите от променливите и масива в Листа и ги правя стоиности на променливи в класа в който се намира потребителя. След което създавам for с усровие (int i = 0; i < lUsers.length; i++ ) като lUsers е името на масива. след което създавам if във for със условие lUser[i].getName().equals(name) && lUser[i].getPassword().equals(password) и след това else в който увеличавам i с 1.
Конзолата показва че има Unknown Source при условието на if-а. Моля кажете къде е проблема и дайте решение
Ето и кода при класа за регистрация
int br1 = 1, br = 0;
ArrayList<Object> dObjects = new ArrayList<Object>();
try {
FileInputStream FileIn = new FileInputStream("users.ser");
ObjectInputStream in = new ObjectInputStream(FileIn);
dObjects = (ArrayList<Object>) in.readObject();
in.close();
FileIn.close();
} catch (IOException e2) {
// TODO: handle exception
e2.printStackTrace();
return;
} catch (ClassNotFoundException c) {
// TODO: handle exception
c.printStackTrace();
}
br1 = (int) dObjects.get(0);
br=(int) dObjects.get(1);
String name = new String(textField.getText());
char[] pass = passwordField.getPassword();
String password = new String(pass);
ArrayList<User> rUsers = new ArrayList<User>();
User[] rUsers2 = new User[br1];
rUsers.add(new User(name, password));
rUsers2[br] = rUsers.get(0);
br++;
br1++;
ArrayList<Object> data = new ArrayList<Object>();
data.add(br1);
data.add(br);
data.add(rUsers2);
try {
FileOutputStream fileOutputStream = new FileOutputStream("users.ser");
ObjectOutputStream out = new ObjectOutputStream(fileOutputStream);
out.writeObject(data);
fileOutputStream.close();
System.out.println("Yes");
} catch (IOException e2) {
e2.printStackTrace();
}
Login nw = new Login();
nw.Login1();
frmRegistrate.dispose();
А ето и при класа за влизане
String name = new String(textField.getText());
String password = new String(passwordField.getPassword());
int b = 0;
ArrayList<Object> dObjects = new ArrayList<Object>();
try {
FileInputStream FileIn = new FileInputStream("users.ser");
ObjectInputStream in = new ObjectInputStream(FileIn);
dObjects = (ArrayList<Object>) in.readObject();
in.close();
FileIn.close();
} catch (IOException e2) {
// TODO: handle exception
e2.printStackTrace();
return;
} catch (ClassNotFoundException c) {
// TODO: handle exception
c.printStackTrace();
}
int rebr1 = (int) dObjects.get(0);
System.out.println(rebr1);
System.out.println(b);
User[] lUsers = new User[rebr1];
lUsers = (User[]) dObjects.get(2);
for (int i = 0; i < lUsers.length; i++) {
User user = lUsers[i];
if (user.getName().equals(name) && user.getPassword().equals(password)) {
i = rebr1;
frmLogin.dispose();
Menu nw = new Menu();
nw.Menu1();
}
Работя с Windows builder затова някои части са по-различни