Форум программистов, компьютерный форум, киберфорум
Java для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 Аватар для 6elka1703
91 / 85 / 27
Регистрация: 29.10.2016
Сообщений: 928

NullPointerException

19.05.2020, 20:07. Показов 471. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер, делаю лабу, и возникла проблемка, когда пытаюсь добавить запись (объект класса Email) в коллекцию, программа почему то падает в ошибку NullPointerException. Подскажите что не так делаю?
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
public class VsuTask {
 
    public static List<Email> MailList;
 
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Load();
        
        boolean flag = true;
        while (flag) {
 
            try {
                System.out.println("Выберите действие:\n"
                        + "1: Добавление записи.\n"
                        + "2: Удаление записи.\n"
                        + "3: Редактирование.\n"
                        + "4: Вывод списка.\n"
                        + "5: Распечатка списка.\n"
                        + "0: Выход.\n");
 
                int number = Integer.parseInt(new Scanner(System.in).nextLine());
                switch (number) {
                    case 1:
                        add();
                        break;
                    case 2:
                        remove();
                        break;
                    case 3:
                        Edit();
                        break;
                    case 4:
                        Print();
                        break;
                    case 5:
                        Report();
                        break;
                    case 0:
                        flag = false;
                        break;
                }
 
                Save();
            } catch (Exception e) {
                System.out.println("Непредвиденная ошибка");
                continue;
            }
        }
    }
 
    public static void Load() {
        try {
            InputStream InputStream = new FileInputStream("file.txt");
            ObjectInputStream ObjInputStream = new ObjectInputStream(InputStream);
            MailList = (List<Email>) ObjInputStream.readObject();
            ObjInputStream.close();
        } catch (IOException | ClassNotFoundException e) {
            MailList = new LinkedList();
        }
    }
 
    public static void Print() {
        for (int i = 0; i < MailList.size(); i++) {
            System.out.println(i + 1 + " " + MailList.get(i));
        }
    }
 
    private static void remove() {
        System.out.println("Введите номер записи для удаления:");
        try {
            int n = Integer.parseInt(new Scanner(System.in).nextLine());
            if (MailList.size() >= n) {
                MailList.remove(n - 1);
            }
        } catch (Exception e) {
            System.out.println("Непредвиденная ошибка");
        }
    }
 
    public static void Edit() {
        System.out.println("Введите номер записи для редактирования:");
        try {
            int n = Integer.parseInt(new Scanner(System.in).nextLine());
            if (MailList.size() >= n) {
                MailList.get(n - 1).Edit();
            }
        } catch (Exception e) {
            System.out.println("Непредвиденная ошибка");
        }
    }
 
    public static void add() {
        Email mail = Email.CreateMail();
        MailList.add(mail);
    }
 
    public static void Save() {
        try {
            OutputStream OutputStream = new FileOutputStream("file.txt");
            ObjectOutputStream ObjOutputStream = new ObjectOutputStream(OutputStream);
            ObjOutputStream.writeObject(MailList);
            ObjOutputStream.close();
        } catch (IOException e) {
            System.out.println("Ошибка при сохранении файла");
        }
    }
 
    public static void Report() {
        int SumIncomingTraffic = 0;
        int SumOutgoingTraffic = 0;
        
        System.out.println("Введите адрес электронной почты");
        String EmailAdress = new Scanner(System.in).nextLine();
        System.out.println("Введите дату (2020-05-18)");
        LocalDate date = LocalDate.parse(new Scanner(System.in).nextLine());
        System.out.println("Введите начало промежутка времени (09:00:00)");
        LocalTime timeBeging = LocalTime.parse(new Scanner(System.in).nextLine());
        System.out.println("Введите конец промежутка времени (23:59:59)");
        LocalTime timeEnd = LocalTime.parse(new Scanner(System.in).nextLine());
        LinkedList<Email> IncomingMail = new LinkedList<Email>();
        LinkedList<Email> OutgoingMail = new LinkedList<Email>();
 
        for (Email Mail : MailList) {
            if (Mail.DateDeparture.isEqual(date) && Mail.TimeDeparture.isAfter(timeBeging) && Mail.TimeDeparture.isBefore(timeEnd)) {
                if (Mail.ReceiveAdress.equals(EmailAdress)) {
                    IncomingMail.add(Mail);
                }
                if (Mail.SendAdress.equals(EmailAdress)) {
                    OutgoingMail.add(Mail);
                }
            }
        }
        
        for (Email mail : IncomingMail) {
            SumIncomingTraffic += mail.VolumeMessage;
        }
        
        for (Email mail : OutgoingMail) {
            SumOutgoingTraffic += mail.VolumeMessage;
        }
        
        System.out.println("Распечатка входящей и исходящей почты для выбранного адреса" + EmailAdress);
    System.out.println("По входящей почте:");
        IncomingMail.forEach((i) -> System.out.println(i));
        System.out.println("По исходящей почте:");
        OutgoingMail.forEach((i) -> System.out.println(i));
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
public class Email implements Serializable{
    public String SendAdress;
    public String ReceiveAdress;
    public LocalDate DateDeparture;
    public LocalTime TimeDeparture;
    public int VolumeMessage;
    
    public Email (String sendAdress, String receiveAdress, LocalDate dateDeparture, LocalTime timeDeparture, int volumeMessage){
        this.SendAdress     = sendAdress;
        this.ReceiveAdress  = receiveAdress;
        this.DateDeparture  = dateDeparture;
        this.TimeDeparture  = timeDeparture;
        this.VolumeMessage  = volumeMessage;
    }
    
    public static Email CreateMail(){
        System.out.println("Введите данные о письме в формате:  Адрес отправителя, Адрес получателя, Дата отправления, Время отправления, Объем письма в байтах");
        System.out.println("Например: andrey@mail.ru nikita@yandex.ru 2020-05-18 11:12:54 2000");
        String mail = new Scanner(System.in).nextLine();
        String [] param = mail.split(" ");
        String sendAdress           = param[0];
        String receiveAdress        = param[1];
        LocalDate dateDepatrure     = LocalDate.parse(param[2]);
        LocalTime timeDeparture     = LocalTime.parse(param[3]);
        int volumeMessage           = Integer.parseInt(param[4]);
        
        return new Email(sendAdress, receiveAdress, dateDepatrure, timeDeparture, volumeMessage);
    }
    
    public void Edit() {
        System.out.println("Текущее письмо: " + toString());
        System.out.print("Измените данные: ");
        String mail = new Scanner(System.in).nextLine();
        String [] param = mail.split(" ");
        SendAdress     = param[0];
        ReceiveAdress  = param[1];
        DateDeparture  = LocalDate.parse(param[2]);
        TimeDeparture  = LocalTime.parse(param[3]);
        VolumeMessage  = Integer.parseInt(param[4]);
    }
    
    @Override
    public String toString() {
        return SendAdress + " " + ReceiveAdress + " " + DateDeparture + " " + TimeDeparture + " " + VolumeMessage + " байт";
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.05.2020, 20:07
Ответы с готовыми решениями:

NullPointerException
Привет, пишу небольшой алгоритм топологической сортировки. В консоль выдает ошибку: &quot;java.lang.NullPointerException&quot;. Проверяю...

NullPointerException
Не могу понять в чем проблема, пишет что: --------------------------------------------------------------------- &quot;Exception in...

NullPointerException
Всем привет, у меня есть класс Profile, создаю массив экземпляров этого класса, все элементы = new Profile();, когда вызываю их функцией...

9
485 / 411 / 126
Регистрация: 23.05.2016
Сообщений: 1,653
19.05.2020, 20:27
видимо, то, что считалось в методе Load() было принудительно приведено к типу List, на самом деле листом не является
0
 Аватар для 6elka1703
91 / 85 / 27
Регистрация: 29.10.2016
Сообщений: 928
19.05.2020, 20:35  [ТС]
Sindbad_M, ну при запуске приложения у меня еще не было файла "file.txt", получается он создался и он пустой, потом я считываю из этого файла и прилетает null, я его привожу к типу list. Но тогда почему ошибка падает при добавлении записи?
0
485 / 411 / 126
Регистрация: 23.05.2016
Сообщений: 1,653
19.05.2020, 20:41
Она будет падать при первом обращении к списку, т.к. до этого JVM не замечает, что нечто принудительно приведенное к типу List на самом деле не является объектом этого типа.
1
 Аватар для 6elka1703
91 / 85 / 27
Регистрация: 29.10.2016
Сообщений: 928
19.05.2020, 20:42  [ТС]
Sindbad_M, а как тогда это обойти?
0
 Аватар для 6elka1703
91 / 85 / 27
Регистрация: 29.10.2016
Сообщений: 928
20.05.2020, 09:25  [ТС]
Sindbad_M,
Цитата Сообщение от Sindbad_M Посмотреть сообщение
Она будет падать при первом обращении к списку, т.к. до этого JVM не замечает, что нечто принудительно приведенное к типу List на самом деле не является объектом этого типа.
Доброе утро,не знаешь как можно это обойти?
0
485 / 411 / 126
Регистрация: 23.05.2016
Сообщений: 1,653
20.05.2020, 09:48
Если честно, не знаю. Я не силен в сериализации. И теперь даже не уверен что мое предположение о причине ошибки правильное. Пока нет возможности проверить код в IDE. Когда проверю - отпишусь. Если еще будет актуально.
0
 Аватар для 6elka1703
91 / 85 / 27
Регистрация: 29.10.2016
Сообщений: 928
20.05.2020, 09:49  [ТС]
Sindbad_M, ок, спасибо
0
Модератор
Эксперт Java
 Аватар для alecss131
2861 / 1367 / 409
Регистрация: 11.08.2017
Сообщений: 4,388
Записей в блоге: 2
20.05.2020, 11:46
6elka1703, запустил ваш код, у меня работает без ошибок
может стэктрэйс ошибки скопируете сюда? и первое что бросается в глаза в вашем коде так это нафига при каждом новом считывании создавать новый сканер?
1
 Аватар для 6elka1703
91 / 85 / 27
Регистрация: 29.10.2016
Сообщений: 928
20.05.2020, 12:18  [ТС]
Цитата Сообщение от alecss131 Посмотреть сообщение
может стэктрэйс ошибки скопируете сюда
а можно по подробней что это и где его скопировать?
Цитата Сообщение от alecss131 Посмотреть сообщение
первое что бросается в глаза в вашем коде так это нафига при каждом новом считывании создавать новый сканер?
просто когда делал написал один метод, а потом его копипастил и изменял. Подправлю этот момент.

Добавлено через 4 минуты
alecss131, странно, удалил ранее созданный файл и заработало без ошибок.

Добавлено через 49 секунд
Видимо просто какой то глюк, всем спасибо за ответы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.05.2020, 12:18
Помогаю со студенческими работами здесь

Ошибка NullPointerException
Есть класс &quot;Товар&quot; public class Goods { protected String nameG; //название товара protected String...

java.lang.NullPointerException
помогите пожалуйста исправит ошибку: Exception in thread &quot;main&quot; java.lang.NullPointerException at com.company.jv.main(jv.java:95)...

Почему выводится исключение NullPointerException?
Почему выводится исключение когда пытаюсь получить длину строки? public static List change(String str){ int len = 0; ...

Не на каждом публичном методе получаю nullPointerException
Здравствуйте, Уважаемы коллеги! Проблема стоит в следующем: Существует реализация класса. Разумеется ,я создаю экземпляр класса и при...

FileNotFoundException и NullPointerException при выполнении метода
Я хочу проверить перевод на странице Я написал класс своей страницы и создал тестовый файл, в котором я тестирую свою страницу,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru