Получение ресурсов из jar в java-приложении для веб-старта - PullRequest
2 голосов
/ 05 сентября 2011

Я пытаюсь загрузить несколько ресурсов в приложении веб-запуска Java.

Я изначально пытался загрузить их, используя:

ClassLoader loader = MyClass.class.getClassLoader();
URL url = loader.getResource("resourceName");
File file = new File(url.toURI());

Но это не сработало - это вызвало исключение IllegalArgumentException. Дальнейшие исследования показали, что этот подход не работает с доступом к ресурсам из файлов JAR, и что мне нужно использовать следующий подход:

ClassLoader loader = MyClass.class.getClassLoader();
InputStream in = loader.getResourceAsStream("resourceName");

Однако я получаю странные результаты, когда запускаю это с помощью Jnlp. Если я запускаю следующее:

public static void main(String[] args) throws IOException, URISyntaxException {
  ClassLoader loader = MyClass.class.getClassLoader();
  String r = "resourceName";
  URL url = loader.getResource(r);
  System.out.println(url!=null);
  InputStream in = loader.getResourceAsStream(r);
  System.out.println(in!=null);
}

В моей среде IDE я становлюсь правдивым (как я и ожидал). При запуске из jnlp я получаю true для URL, но false для InputStream.

Есть идеи, что я могу делать не так? Существуют ли более эффективные способы загрузки ресурсов для использования в приложении веб-запуска java?

Редактировать: Для информации, мои ресурсы находятся в MyProject / src / main / resources, а когда генерируется jar, ресурсы находятся в корне jar.

Ответы [ 3 ]

2 голосов
/ 05 сентября 2011
public static void main(String[] args) throws IOException, URISyntaxException {
  ClassLoader loader = MyClass.class.getClassLoader();
  String r = "resourceName";
  URL url = loader.getResource(r);
  System.out.println(url!=null);
  InputStream in = url.openStream();
  System.out.println(in!=null);
}
1 голос
/ 05 сентября 2011

Хорошо, поэтому проблема заключалась в том, что я пытался получить доступ к каталогу ресурсов (т.е. из приведенного в моем примере примера, resourceName - это каталог файлов ресурсов).

Хотя доступ к ресурсам возможентаким образом, в большинстве сред (например, в IDE) это невозможно при запуске из веб-запуска Java.

Я нашел эту страницу особенно полезной: http://lopica.sourceforge.net/faq.html#listresources

... и следовалэтот подход, чтобы сделать каталог ресурсов, который я затем могу перебрать, чтобы получить соответствующие ресурсы.

0 голосов
/ 26 марта 2012

вам нужно добавить путь к классу в файле манифеста

...