powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Программа не видит properties-файл при её запуске двойным кликом
10 сообщений из 10, страница 1 из 1
Программа не видит properties-файл при её запуске двойным кликом
    #39535409
MaxLich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте. Написал гуишное приложение (на свинге). Приложение работает с базой данных. Настройки для подключения к базе данных храню в проперти-файле. Кладу его в корень проекта (в IDEA). Путь прописываю так:
Код: java
1.
    private static final String PATH_TO_FILE_PROPERTIES = "settings_db_mysql.properties";



В ИДЕИ всё работает, файл подцепляется, с базой устанавливается соединение, и в общем всё нормально. Как создаютджар-ник в ИДЕИ и кладу его в любую папку, а рядом кладу этот пропертис-файл, то при запуске программы двойным кликом, она не находит этот файл. Пробую это в линуксе убунту. Кстати, если запускать программу из командной строки, то она находит этот файл.

Также ставил на виртуальную машину виндоуз 7, и там пробовал запустить программу двойным кликом. Всё работает, программа находит файл. Из командной строки тоже всё работает.

Пробовал разные варианты: дописывал в начале пути к файлу new File("") + File.separator, дописывал System.getProperty("user.dir"). Ничего не помогает. Свойство user.dir при запуске программы двойным кликом возвращает домашний каталог пользователя.

Хотелось бы, чтобы программа брала файлом, лежащий рядом с ней (в той же папке). Вообще, можно как-то получить каталог, в котором лежит программа?
...
Рейтинг: 0 / 0
Программа не видит properties-файл при её запуске двойным кликом
    #39535425
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaxLichХотелось бы, чтобы программа брала файлом, лежащий рядом с ней (в той же папке). Вообще, можно как-то получить каталог, в котором лежит программа?
Всё верно. java.io.File резолвит относительные пути относительно user.dir. А user.dir может быть абсолютно любым в зависимости от способа запуска. Поэтому вариантов решения есть несколько:
1.
Код: java
1.
Class.getClassLoader().getProtectionDomain().getCodeSource().getLocation().


2. batch/schell скрипты, которые переходят в каталог где находится скрипт и запускают jar оттуда, таким образом user.dir всегда нужный.
3. Launch4j
...
Рейтинг: 0 / 0
Программа не видит properties-файл при её запуске двойным кликом
    #39535479
MaxLich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,
1-ое решение мне уже подсказали. 2-ое - не очень красивое.
По 3-ему: эта программа же только для винды, икзешники делать из джар? (Если что мне нужно, чтобы работало на любых системах, потому что я не знаю, где это будет запускать пользователь (это может быть винда, убунту, или серверная версия винды или линукса/юникса))
...
Рейтинг: 0 / 0
Программа не видит properties-файл при её запуске двойным кликом
    #39535483
MaxLich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz, Ещё один вопрос. На другом форуме предложили решение, похожее на первое, но не могу понять, зачем туда вставили ещё одну строчку. Можете сказать? Решение такое:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
        public static String getClassLocation(Class<?> c) {
            String classLocation = "";
            URL pathURL = c.getProtectionDomain().getCodeSource().getLocation();
            try {
                classLocation = URLDecoder.decode(pathURL.getFile().substring(1).replace('/', File.separatorChar), Charset.defaultCharset().name()); // (1)
            } catch (UnsupportedEncodingException ex) {
                Logger.getLogger(MyClass.class.getName()).log(Level.SEVERE, null, ex);
            }
            return classLocation;
        }



Вопрос касается строчки, помеченной (1). Убрал её, и всё работает без неё. По-быстрому глянул, ничего такого не нашёл, вроде как и нужна. Так что она делает? Зачем она нужна? Может её, правда, нафиг убрать?
...
Рейтинг: 0 / 0
Программа не видит properties-файл при её запуске двойным кликом
    #39535484
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaxLich1-ое решение мне уже подсказали.

И? Это значит нужно было догадаться и не писать о нём?

MaxLich2-ое - не очень красивое.

Нормальное. Многие пользуются.

MaxLichПо 3-ему: эта программа же только для винды, икзешники делать из джар? (Если что мне нужно, чтобы работало на любых системах, потому что я не знаю, где это будет запускать пользователь (это может быть винда, убунту, или серверная версия винды или линукса/юникса))
http://launch4j.sourceforge.net/ The wrapped program works on all Windows platforms, Launch4j works on Windows, Linux and Mac OS X.
...
Рейтинг: 0 / 0
Программа не видит properties-файл при её запуске двойным кликом
    #39535488
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaxLichВопрос касается строчки, помеченной (1). Убрал её, и всё работает без неё. По-быстрому глянул, ничего такого не нашёл, вроде как и нужна. Так что она делает? Зачем она нужна? Может её, правда, нафиг убрать?
Ну, задумка в том что в URL всегда однозначный символ-разделитель, а в файловой системе может быть прямой слэш, обратный и даже символ йены и перечеркнутое W. Но на самом деле оно бестолковое по двум причинам.
1. https://docs.oracle.com/javase/7/docs/api/java/io/File.html#File(java.net.URI)
2. Операционные системы, обычно, понимают слэш и конвертируют в текущий разделитель прозрачно без особых усилий со стороны разработчика.
...
Рейтинг: 0 / 0
Программа не видит properties-файл при её запуске двойным кликом
    #39535503
MaxLich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,
Про launch4j: авторLaunch4j wraps jars in Windows native executables and allows to run them like a regular Windows program То есть, как я понял, она делает икзешники для винды из джаров, но сама работает не только на винде, но также и на линуксе и маке.

А вообще, пока остановился на первом решении. Его ещё хорошенько протестирую, и скорее всего оставлю. Кстати, а знаете, как сделать, чтобы с этим решением работало и в IntelliJ IDEA? Там он берёт папку в которой лежит class-файл. Наверно, нет такого универсального решения, чтобы ещё и в ИДЕИ работало!?
...
Рейтинг: 0 / 0
Программа не видит properties-файл при её запуске двойным кликом
    #39535529
MaxLich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ладно, сделал пока такое решение (метод):
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
    private static String getClassLocation(Class<?> c) {
        URL pathURL = c.getProtectionDomain().getCodeSource().getLocation();
        try {
            Path path = Paths.get(pathURL.toURI());
            String rootStr = path.getRoot().toString();
            return rootStr + path.subpath(0, path.getNameCount()-1).toString() + File.separator;
        } catch (URISyntaxException e) {
            e.printStackTrace();
            return "";
        }
    }


На вход кидаю класс, где лежит этот метод. В итоге получаю папку, где лежит джар-ник программы. Тестировал на винде (семёрке) и на линуксе (убунту) - всё работает. Такое решение и оставлю. (правда, в ИДЕИ это решение не работает, поэтому пока пользую комментированием-раскомментированием строк)
...
Рейтинг: 0 / 0
Программа не видит properties-файл при её запуске двойным кликом
    #39535554
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaxLich(правда, в ИДЕИ это решение не работает, поэтому пока пользую комментированием-раскомментированием строк)
Ну, есть всегда вариант проверять наличие файла и читать относительно user.dir. У меня, правда, с таким подходом комедный случай был, когда QA себе скопировал на рабочий стол конфиги зачем-то и они оттуда подчитываться начали.
...
Рейтинг: 0 / 0
Программа не видит properties-файл при её запуске двойным кликом
    #39535576
MaxLich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz, Да, вроде бы неплохое решение. Надо будет попробовать. (Хотя менять код из-за одной ИДЕИ, это мне кажется, не очень разумно; но в данном случае, мне всё равно будет так удобнее.)
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Программа не видит properties-файл при её запуске двойным кликом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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