Java + Linux: рабочий каталог - моя домашняя папка - PullRequest
2 голосов
/ 11 ноября 2010

У многих людей возникает проблема с тем, что при запуске из nautilus JAR-приложения CWD (текущий рабочий каталог) устанавливается в их домашнюю папку (а не в папку, в которой находится JAR).Это ошибка в Nautilus, не особенно в Linux.

Если вам известен трюк, позволяющий упростить запуск Jar-кода вместо открытия терминала и ввода вручную java -jar myJar.jar, пожалуйста, опубликуйте его ниже.1004 *

Спасибо


Короткий пример кода проблемы:

File f = new File("ASimpleTextFile.txt");
System.out.println(f.getAbsolutePath());

В Windows это печатает: [The Path To The Jar]/ASimpleTextFile.txt
Но в Linux это печатает: /home/[yourName]/ASimpleTextFile.txt

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

Ответы [ 2 ]

4 голосов
/ 11 ноября 2010

В принципе, нет никаких гарантий относительно текущего рабочего каталога.

Однако вы МОЖЕТЕ сделать то, что спросите JVM об URL, где он нашел байт-код для данного класса (которыйВы знаете, где находится) и используете это, чтобы найти другие ресурсы «рядом» с ним.

См. Определите местоположение класса Java, загруженного Matlab

0 голосов
/ 11 ноября 2010

Я написал крошечное приложение на C ++, которое действует как обертка, которая сначала устанавливает рабочий каталог.Код приложения можно найти здесь на pastebin .Скомпилируйте это и перейдите к /usr/bin/java-jar-launch.

Затем в Nautilus перейдите к одному из ваших файлов JAR, выберите и щелкните правой кнопкой мыши на нем, а затем выберите «открыть с помощью».Затем выберите пользовательскую команду и введите java-jar-launch.Не забудьте установить флажок, чтобы запомнить его для типа JAR Java.Нажмите OK и закройте.

Если дважды щелкнуть файл JAR в Nautilus, он откроется в моем приложении, которое вызывает java с в правильном рабочем каталоге.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...