2010-11-11 3 views
2

У многих людей есть проблема, что, когда они начинают с nautilus JAR-приложения, CWD (Current Working Directory) устанавливается в их домашнюю папку (а не в папку в котором находится JAR). Это ошибка в Nautilus, а не Linux.Java + Linux: рабочий каталог - это моя домашняя папка

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

Благодаря


Краткий пример кода задачи:

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

Каким образом ваша программа Java использует текущий каталог? Вы даже не можете делать 'chdir' в Java, поэтому идея состоит в том, что ваша программа должна быть cdd-agnostic. –

+0

@ Крис: Совсем не так; Я часто использую текущий каталог для записи данных, требуя, чтобы пользователь установил приложение, чтобы иметь текущий каталог, где они хотят записывать данные. –

+1

@Software Monkey: это разумный подход, когда приложение является приложением командной строки. Но для приложения пользовательского интерфейса не должно быть никакой зависимости от текущего каталога (за исключением, может быть, места размещения файлов с открытым файлом или подобных вещей по умолчанию). –

ответ

0

Я сделал этот вопрос из-за я хочу поделиться своим самодельным решением. Я написал небольшое приложение на C++, которое вы должны добавить в /usr/bin.

Код приложения вы видите here (PASTEBIN).
Само приложение можно загрузить here (Мой собственный FTP) или MegaUpload.

Таким образом, чтобы поместить его в /usr/bin откройте терминал и введите:

sudo cp java-jar-launch /usr/bin/ 
[enter your password] 

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

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

+0

Это может быть плохо. Я хотел бы, чтобы CWD был местом, где я могу записывать данные - исполняемое местоположение не должно быть доступно для записи стандартным пользователям. Я привык к ярлыкам Windows, где вы можете установить CWD как часть параметров запуска. –

+0

@Software Monkey: мое приложение сначала меняет каталог на JAR-файл-родительский, а затем вызывает его. –

+0

, вы можете рассмотреть возможность изучения сценариев оболочки и изучить, как использовать 'basename' и' dirname' в сценарии оболочки. То, что вы написали, скорее всего эквивалентно сценарию с одной строкой. –

3

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

Однако вы можете спросить JVM о URL-адресе, где он нашел байт-код для данного класса (который вы знаете, где помещен), и использовать его для поиска других ресурсов «рядом» с ним.

См Determine location of a java class loaded by Matlab

+0

Oooh, stackoverflow теперь показывает заголовки вопросов stackoverflow при связывании. Ницца! –

 Смежные вопросы

  • Нет связанных вопросов^_^