У меня есть приложение для веб-запуска 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. Для меня это выглядит как минимум немного странно, но я не уверен, что это причина проблемы.
Кто-нибудь сталкивался с этой проблемой? Я что-то пропустил? Любая помощь или идеи высоко ценятся.