@MaxLich
java developer

Почему у меня программа не работает так, как надо, когда я запускаю её двойным кликом?

Здравствуйте. Программа коннектится к удалённой базе. Все настройки прописаны в отдельном properties-файле. Из IDEA всё работает. Если запускаю собранный проект из командной строки (собираю, естественно, в jar, и запускаю так: java -jar <имя файла.jar>), тоже всё работает (данные вытягиваются из базы).
Если же запускаю программу двойным кликом по джар-нику, то данные из базы не вытягиваются. Что это может быть?

UPD1: Попробовал из виндоуза - всё работает. Только на линуксе (убунту) почему-то не работает.
UPD2: Попробовал так прописать путь в коде:
private static final String PATH_TO_FILE_PROPERTIES = new File("").getAbsoluteFile() + File.separator + "settings_db_mysql_net.properties";

И в коде сделал запись значения этой переменной во внешний файл. В итоге, когда я запускаю джар-ник двойным кликом, то этот файл, оказывается, ищется в моей home-папке (в убунту). Если же запускаю в идеи и через консоль, то всё нормально.
  • Вопрос задан
  • 207 просмотров
Решения вопроса 1
@MaxLich Автор вопроса
java developer
В общем-то решил эту проблему. Получился такой метод:
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 "";
        }
    }

На вход подаю класс, в котором лежит этот метод. В итоге получается абсолютный путь к папке, в которой лежит джар-файл. Ну а дальше всё просто: присоединяю к этому пути имя проперти-файла, подаю эту строку на вход методу load() из класса Properties (естественно, перед этим создаю объект этого класса), и дальше получаю объект Properties с нужными данными. Работает и в линуксе (убунту), и в виндоуз (виндоуз 7 в моём случае).
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@SnowBearRu
Попробуйте получить файл пропертей на основе getClass().getResource()
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы