2012-07-16 4 views
0

Я создаю приложение Java для связи через последовательный порт и в папке приложения у меня есть два ресурса, которые должны присутствовать во время выполнения. Первый - это изображение, которое используется в качестве заставки, а другое - файл конфигурации, который необходимо прочитать при запуске программы.Ссылка на файлы внутри JAR

Вот сокращенный вариант выхода из команды «дерева» в Linux, эти два файла, что мне нужно быть ссылки являются «commandSet.config» и «плескаться-screen2.png»

. 
├── bin 
│   ├──... 
├── commandSet.config 
├── app-manifest.txt 
├── splash-screen2.png 
└── src 
    ├── events 
    │   └── InterfaceEvents.java 
    ├── models 
    │   ├── Command.java 
    │   └── Phone.java 
    ├── operations 
    │   ├── Application.java 
    │   ├── ... 
    └── views 
     ├── CallDialog.java 
     ├── SplashScreen.java 
     └── Window.java 

я в настоящее время ссылки в следующих строках:

BufferedReader in = new BufferedReader(new FileReader("commandSet.config")); 

и

JLabel image = new JLabel(new ImageIcon("splash-screen2.png")); 

Это ж orks fine, когда я запускаю его из Eclipse, но как только я экспортирую в runnable JAR, файлы не перемещаются и, следовательно, неправильно указаны. Я попробовал переместить их в папку «src», в результате чего они были заархивированы в JAR, но я все еще не мог ссылаться на них.

Я довольно новичок в концепции экспорта проектов Java, поэтому, возможно, я пропустил что-то очевидное. Если бы кто-то мог показать мне лучший способ сделать это и лучший подход для будущих файловых систем проекта, я был бы очень благодарен. Ура!

ответ

0

Хорошо, я сумел взломать это и подумал, что я отброшу ответ другим людям в будущем. Я в основном следовал рекомендация «duffymo в», вот что я сделал:

  • Создано JAR с моими ресурсами
  • Положите JAR в корне проекта..
  • Используется Eclipse для добавления этого JAR в путь сборки.
  • Используется getResourceAsStream ("/nameOfFile.ext"), чтобы получить потоки для моих ресурсов.

Cheers!

1

Вы не можете получить доступ к этому файлу так же, как если бы это было в файловой системе.

Используйте getResourceAsStream() из своего контекста, чтобы прочитать его с помощью CLASSPATH с помощью загрузчика классов.

+0

Хорошо, где файлы должны храниться, чтобы ссылаться на них таким образом? –

+0

В JAR или WAR, что вы развертываете свое приложение, конечно. Так как загрузчик классов выглядит в CLASSPATH, вам нужно, чтобы они были в CLASSPATH. В вашем JAR это находится в манифесте Class-Path. В вашей WAR, это папка WEB-INF/classes – duffymo

+0

Хорошо, для справки, я работаю только с JAR. Я не совсем уверен, что вы имеете в виду, «вам нужно, чтобы они были в CLASSPATH»? У меня есть файл манифеста, который содержит следующее: Main-Class: operations.Application –

3
InputStream in = this.getClass().getClassLoader().getResourceAsStream("splash-screen2.png"); 
byte[] buffer = new byte[in.available()]; 
in.read(buffer); 
ImageIcon icon = new ImageIcon(buffer); 
+0

Это вернет inputStream, хотя верно? Для ImageIcon нет конструкторской перегрузки, которая принимает объект inputStream в качестве параметра. –

+1

Вам нужно загрузить содержимое InputStream в массив byte [] и использовать этот конструктор. –

+0

ответ обновлен – Ilya

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