ImageIO не подходит для чтения в веб-запуске Java

У меня есть приложение для веб-запуска Java, которое показывает некоторые изображения png, загруженные с помощью:

InputStream is = AClass.class.getClassLoader().getResourceAsStream(“icon/tray.png”); 
ImageIO.read(is);

Хотя это отлично работает из Eclipse, это не работает, когда я запускаю приложение с веб-запуском Java. Очевидно, что разница в обеих настройках заключается в том, что при веб-запуске Java изображение будет загружено из файла jar, а в Eclipse изображения поступают непосредственно из файловой системы.

Что происходит при веб-запуске Java, так это то, что InputStream создается, как и ожидалось (это означает, что ресурс может быть загружен), но, насколько я понимаю, в методе ImageIO.read() не может быть найдено подходящее средство чтения для изображения. в потоке, а ImageIO.read() возвращает значение null. Как может быть, что читатель может быть найден при запуске из Eclipse, но не при запуске с веб-запуском Java?

Кроме того, я получил еще несколько png, которые загружаются механизмами из JavaFX, точнее через css, например.

-fx-image: url('icon/settings_general_32x32.png');

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

Итак, я посмотрел код PNGImageReaderSpi, и в методе canDecodeInput() можно увидеть, что первые 8 байтов потока будут проанализированы, чтобы решить, может ли средство чтения PNG декодировать изображение или нет. Итак, я посмотрел на первые 8 байтов потока изображений при запуске из Eclipse и при запуске из веб-сайта Java, и действительно есть разница. При запуске из Eclipse первые байты равны -119,80,78,71,13,10,26,10, а в веб-запуске Java первые байты равны -17, -65, -67,80,78,71,13, 10. Для меня это выглядит как минимум немного странно, но я не уверен, что это причина проблемы.

Кто-нибудь сталкивался с этой проблемой? Я что-то пропустил? Любая помощь или идеи высоко ценятся.


person user2662314    schedule 07.08.2013    source источник
comment
Что произойдет, если вы создадите приложение как автономный jar (не веб-запуск) и запустите его из командной строки, как в инструкциях на компилировать javafx 2.0 вручную?   -  person jewelsea    schedule 08.08.2013
comment
Последовательность 80,78,71,13,10 находится в обоих местах, так что кажется, что в упакованных версиях WebStart к ней добавлено несколько байтов (первый байт заменен на 3 других байта). Возможно, некоторые из инструментов, которые вы используете, лечат ваши изображения в виде текста (не двоичного) и изменяет их как часть упаковки WebStart/JAR? Можете ли вы извлечь изображения из JAR и посмотреть, правильно ли они отображаются?   -  person Harald K    schedule 08.08.2013
comment
Сценарий сборки проекта, который создает приложение для веб-запуска, свернул изображения с помощью фильтра замены, чтобы изображения не могли быть открыты программой чтения. Большое спасибо Харальду за его подсказку. С уважением Себастьян   -  person user2662314    schedule 08.08.2013


Ответы (1)


Как написано в комментарии, изображения были повреждены скриптом сборки приложений. Это было причиной того, что он не работал с веб-запуском Java, но работал с Eclipse, где скрипт сборки не использовался.

person user2662314    schedule 08.08.2013