Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Ошибка при первом запуске jar файла / 6 сообщений из 6, страница 1 из 1
22.09.2016, 03:33
    #39313059
ali_tash
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при первом запуске jar файла
Здравствуйте, написал программку и упаковал её в jar файл, но при первом его запуске(после перезагрузки компьютера) - появляется непонятная ошибка, которую не могу отследить, так как ошибка проявляется только при запуске самого jar файла, а если запускать программу из средства разработки ошибки не возникает.
При последующих запусках, всё работает нормально.
Дальше больше, решил вывести сообщение об ошибке в лог файлы, но хз почему, лог файлы не появились и сообщения(см. код) не показались, запустил ещё раз - всё нормально(т.е. прога запустилась нормально и ошибку не удалось установить).
Т.е. возникает какое-то исключение + точно FileNotFoundException - но непонятно почему. Файл есть, что за другая ошибка вообще непонятно.
Подозреваю что что то связанное с инициализацией самой java машины - т.е. может какая-то java библиотека не успевает загрузиться и десерилизация нормально не проходит. А при повторных запусках всё нормально.
Сама функция вызывается ещё через одну функцию, которая вызывается из конструктора.

По логике этой функции, при первом запуске, если не удаётся найти файл статистики, значит первый запуск программы(вообще первый запуск, а не только первый запуск при загрузке компьютера) - и создаётся файл статистики. Но опять же, при первом запуске, при загрузке компьютера, файл статистики не создаётся, т.е. из-за этой ошибки не записать не считать файл не удаётся.
Переменная STATA_FILE - не содержит никаких путей, просто название файла, который лежит в одном каталоге с jar файлом программы.
Помогите разобраться в чём причина ошибки.
Может ли быть это связанно с тем что на компьютере установлено несколько разных java машин на 64 и на 32 ?

Код: 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.
    // Загружаем файл статистики
    private synchronized boolean loadStoredStataObj() {
        try {
            FileInputStream fis = new FileInputStream(STATA_FILE);
            ObjectInputStream ois = new ObjectInputStream(fis);
            this.sStata = (MonitorStat[]) ois.readObject();
            ois.close();
            fis.close();
            return false; // Не первый запуск
        } catch (FileNotFoundException e) {

            // Отлавливаем ошибку в лог
            File file = new File("stat_err.log");
            PrintStream ps = null;

            try {
                ps = new PrintStream(file);
            } catch (FileNotFoundException fnf) {
                fnf.printStackTrace();
            }

            e.printStackTrace(ps);

            saveStoredStataObj(); // Первый запуск, сохраняем файл статистики проинициализированным массивом
            System.out.println("Файл статистики не найден");
            //JOptionPane.showMessageDialog(null, "Файл статистики не найден", "", 2);
            return true; // Первый запуск, настроек ещё нет
        } catch (Exception exc) {

            // Отлавливаем ошибку
            File file = new File("stat_err2.log");
            PrintStream ps = null;

            try {
                ps = new PrintStream(file);
            } catch (FileNotFoundException fnf) {
                fnf.printStackTrace();
            }

            exc.printStackTrace(ps);

            saveStoredStataObj(); // Первый запуск, сохраняем файл статистики проинициализированным массивом
            System.out.println("Ошибка");
            JOptionPane.showMessageDialog(null, "Ошибка загрузки файла статистики", "", 2);
            exc.printStackTrace();
            return true; // Первый запуск, настроек ещё нет
        }


    }
...
Рейтинг: 0 / 0
22.09.2016, 07:43
    #39313090
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при первом запуске jar файла
ali_tashТ.е. возникает какое-то исключение + точно FileNotFoundException - но непонятно почему. Файл есть, что за другая ошибка вообще непонятно.
Нам предлагается угадать "какое-то исключение" и "другую ошибку"? Или вы соизволите их залогировать и привести?

ali_tashПодозреваю что что то связанное с инициализацией самой java машины - т.е. может какая-то java библиотека не успевает загрузиться и десерилизация нормально не проходит. А при повторных запусках всё нормально.

Ерунда.

ali_tashМожет ли быть это связанно с тем что на компьютере установлено несколько разных java машин на 64 и на 32 ?

Нет.
...
Рейтинг: 0 / 0
22.09.2016, 11:20
    #39313231
ali_tash
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при первом запуске jar файла
Blazkowicz,

Да в том то и дело, что приведённый код, почему то, при первом запуске когда должна появиться ошибка не логгирует ничего.
И почему появляется FileNotFoundException - если файл есть ? почему только при первом запуске ?
...
Рейтинг: 0 / 0
22.09.2016, 13:02
    #39313350
mrWolf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при первом запуске jar файла
ali_tashрешил вывести сообщение об ошибке в лог файлы, но хз почему, лог файлы не появились и сообщения(см. код) не показалисьА где у вас собственно запись в этот лог файл?
(Добавьте нормальную систему логирования вместо этого велосипеда)

Перед выводом сообщения у вас идет вызов saveStoredStataObj(). Что там происходит неизвестно, код то вы не привели. Но раз вывода в консоль не было, значит ошибка именно там и до строки System.out.println("Файл статистики не найден") дело просто не доходит.
...
Рейтинг: 0 / 0
22.09.2016, 13:20
    #39313378
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при первом запуске jar файла
ali_tash,

- Используйте конструкцию try with resource, чтобы правильно закрывать файлы.
- Используйте API или библиотеки для логирования, вместо вывода в out процесса.
- Используйте File.exists() вместо FileNotFoundException.
- Не пишите огромные catch блоки - выносите код в методы. В catch блоке должно быть максимум 2 строки. Одна - логирование - вторая действие.
- Не мешайте UI и работу с классами в одну кучу.

Уверен что ваш код можно сократить раза в три. Вы раздули простейшую задачу до целого экрана из-за чего решительно не понятно что этот метод вообще делает.
...
Рейтинг: 0 / 0
22.09.2016, 16:37
    #39313613
ali_tash
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при первом запуске jar файла
Разобрался, надо было так сделать.

Только не понятно, почему с первого раза файл без указания директории не цепляется, а со второго цеплялся нормально.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
       File file = null;
 
        try {
            file = new File(App.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath());
            folder = file.getParent();
        } catch (URISyntaxException e) {
            e.printStackTrace();
        }
 
.....
 
           FileInputStream fis = new FileInputStream(folder + File.separator + STATA_FILE);
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Ошибка при первом запуске jar файла / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]