Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

nikolayd1 avatar nikolayd1 0 Точки

Проблем с 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 затова някои части са по-различни

            

 

            

Тагове:
0
Java OOP Basics 01/08/2018 11:48:28
Vesso1980 avatar Vesso1980 486 Точки

Мисля, че ще трябва да покажеш някакъв код, ако искаш да ти се открие грешката. Така просто по разказ за кодът ти незнам дали някой, изобщо ще се навие да мисли по въпроса.

0
01/08/2018 10:53:41
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.