Когда я использую getClass().getResource(ACCEPT_PNG) для загрузки ImageIcon, он хорошо работает на моем локальном компьютере. Когда мой класс встроен со своим ресурсом в JAR, для приложения Java Web Start ресурс не может быть найден, и тот же код возвращает значение null...

Любая идея?

   /** Path to a PNG ressource. */
   private static final String ACCEPT_PNG = "accept.png";

   private static ImageIcon acceptPngIcon = null;

   private ImageIcon getAcceptPngIcon() {
      if (acceptPngIcon == null) {
         acceptPngIcon = new ImageIcon(getClass().getResource(ACCEPT_PNG));
      }
      return acceptPngIcon;
   }
3
Eric V 23 Мар 2011 в 18:20
Локально, в каком каталоге у вас есть PNG? В JAR, куда вы его положили?
 – 
djna
23 Мар 2011 в 18:23
1
1) Каково содержание файла JNLP? 2) Какая банка должна содержать изображение? 3) Что такое дамп содержимого этой банки? Без этой информации я могу только догадываться, а я не люблю догадываться.
 – 
Andrew Thompson
23 Мар 2011 в 18:27
Судя по вопросу, похоже, вы не пробовали читать ресурс из файла jar без WebStart. Я предлагаю попробовать, если вы этого не сделали. (Я также предлагаю избегать изменяемой статики.)
 – 
Tom Hawtin - tackline
23 Мар 2011 в 18:28
1
Поскольку accept.png не начинается с косой черты, предполагается, что это класс, в котором находится этот код. Если это не так и вместо этого accept.png находится в корне пути к классу, добавьте косую черту.
 – 
MeBigFatGuy
23 Мар 2011 в 18:36
1
Для потомков: у меня была эта проблема сегодня вечером... Мне потребовалась целая вечность, чтобы понять, что на локальной машине нет разницы между .png и .PNG, но когда вы загружаетесь с помощью Java Web Start, URL-адреса деликатный случай. Итак, убедитесь, что вы вводите свои ресурсы точно, регистр и все такое.
 – 
ryvantage
16 Июн 2014 в 08:18

1 ответ

У меня была та же проблема, и я решил ее, следуя подходу в Oracle Java Web Start учебник: используйте загрузчик классов для получения ресурса вместо самого класса:

getClass().getClassLoader().getResource(ACCEPT_PNG); 
    // works both locally and via Web Start
getClass().getResource(ACCEPT_PNG); 
    // only works locally; returns null for any path via Web Start
1
driu 12 Ноя 2015 в 14:05