Как получить доступ к ресурсам моих приложений внутри работающей фляги? - PullRequest
3 голосов
/ 22 августа 2011

Я только что опубликовал этот вопрос: Как распространить мою программу на Java, чтобы ее можно было запустить, дважды щелкнув по одному файлу? , и хотя я получил работающую флягу, многие вещи не работаюттак, как я хотел бы, чтобы, поскольку моя программа не может найти ресурсы, которые я хочу использовать, такие как изображения и файл базы данных SQLite.

В моей файловой системе у меня есть несколько изображений .png в папке img ибаза данных, расположенная в корневой папке проекта с именем test.db

Пока мой проект находился в Eclipse, я обращался к своим изображениям, используя что-то вроде:

BufferedImage bufImg = ImageIO.read(new File("img/anImage.png"))

И я подключился к своей базе данных SQLite, используя:

Class.forName("org.sqlite.JDBC");
conn = DriverManager.getConnection("jdbc:sqlite:test.db");

Теперь, когда я дважды щелкаю свой недавно созданный runnable-jar, ресурсы не могут быть найдены.Я хотел бы знать, как я должен получить к ним доступ и чтобы моя программа работала, когда ее нет в IDE.

Я также хотел бы знать, как я могу видеть, что такое исключения (если ввсе возможно).Потому что сейчас некоторые страницы остаются серыми, потому что они не загружаются, потому что (я предполагаю) некоторые ресурсы не могут быть найдены, но я понятия не имею, является ли проблема только базой данных или изображениями.

Огромное спасибо за то, что задали два смежных вопроса в столь короткие сроки!

1 Ответ

5 голосов
/ 22 августа 2011

В Jar нет файлов, есть только ресурсы, поэтому большинство методов, использующих файлы, также принимают ресурсы.

Например, ImageIO.read (...) имеет перегрузку, которая принимает URL, и ту, которая принимает InputStream.Поэтому попробуйте

BufferedImage bufImg = ImageIO.read(MyClass.class.
         getResourceAsStream("img/anImage.png"));

Просто убедитесь, что вы указали путь относительно местоположения файла класса и вашего фактического имени класса, или this.getClass()

...