2014-09-01 4 views
0

У меня есть Java-приложение для настольных компьютеров, которое я разработал в NetBeans, который я почерпнул для распространения среди студентов. Внутри этого zip-файла у меня есть .jar, каталог «lib», содержащий баннер swing-layout, и каталог, который я назвал «исходными файлами», который содержит все текстовые файлы, необходимые для программы.Открытие файлов, расположенных в каталоге java jar, а не в текущем рабочем каталоге

Все отлично работает, если файл баночка дважды щелкнул, но при запуске из командной строки (java -jar MyApp.jar), он может найти только «исходники,» каталог если сначала перейдите в каталог, файл прежде чем запускать команду, то, что некоторые ученики забывают делать. По-видимому, нет способа изменить текущий рабочий каталог из моего кода. Путь к «исходным файлам» указан в моем коде как относительный путь , предполагая, что я в папке MyApp. Итак, что я могу сделать, чтобы программа могла запускаться из командной строки без необходимости cd в содержащую директорию? Можно ли добавить это в файл манифеста?

Эта проблема сталкивается в основном с учащимися, использующими Linux, но на Mac это то же самое. Я предполагаю, что это то же самое в Windows, но я думаю, что ни один из студентов с Windows не запускает его из командной строки.

+0

Как вы получаете доступ к своим ресурсам в своем коде? – Dici

+0

BufferedReader f = новый BufferedReader (новый InputStreamReader (новый FileInputStream (имя файла), «UTF-8»)); где filename - относительный путь: sourcefiles/xxxxx. Файл jar для запуска программы, java-библиотека и папка sourcefiles находятся в папке, которую я затем застегиваю, чтобы отправить ученикам. Я не хотел, чтобы исходные файлы были включены в банку, поскольку они являются ресурсами, которые могут быть изменены программой. Этот путь, казалось, работал для всего, кроме как из командной строки. (Это студенты-гуманитарии, некоторые более технологичные, чем другие). – Numa

ответ

1

Вы не можете изменить каталог по умолчанию, но вы можете получить каталог, в котором работает класс Jar, и использовать его в своем коде как базовый путь.

String jarLocation = ThisClass.class.getProtectionDomain() 
         .getCodeSource().getLocation().getPath(); 

Из этого вы можете получить каталог баночка находится. Скорее всего, вы будете хотеть, чтобы обернуть это как метод ваши студенты могут позвонить.

+0

Я использовал zikaDirectory = jarFile.getParentFile(). GetName(); а затем if (! zikaDirectory.equals (currentWorkingDirName)), чтобы узнать, произошло ли это, но я озадачен последней строкой вашего сообщения о методе, который могут вызвать студенты, использующие программу. – Numa

+0

@Numa Я предлагаю вам дать студентам некоторый код, который скрывает некоторые из более сложных кода. –

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