2016-05-28 2 views
0

Я написал приложение swing, и он отлично работает в eclipse, но когда я экспортирую его в качестве исполняемых частей jar-файла приложения, при обработке изображений это например, строка;исполняемый jar из eclipse не может использовать изображения в пакетах ... иногда

logo = getClass().getResource("/com/cogentautomation/logo.jpg").getPath(); 

затмение упаковки изображения в пакете com.cogentautomation и я могу видеть его в самом .jar, я попробовал оба метода экспорта, извлечение необходимых библиотек и пакетов требуются библиотеки, один говорит;

FileNotFoundException com\cogentautomation\logo.jpg 

другой говорит;

FileNotFoundException file:\c:\documents\hs.jar!\com\cogentautomation\logo.jpg 

Я использую библиотеку для разбора из PDF-файла, который является, где происходит эта ошибка, однако она работает в затмении, и с другими изображениями, которые находятся на диске, которые не ява ресурс.

Я читал другие темы по проблеме, но ничего действительно не помогло.

EDIT: обращаясь к чему-то в комментариях, мне нужна переменная String, которую я использую, для ввода изображения требуется ввод строки;

import org.pdfclown.documents.contents.entities.Image; 

Image image = Image.get(logo); 
+0

Как правило, вы сохраняете ресурсы для проекта вне определения пакета. В проекте maven, например, 'src/main/java' - это код и' src/main/resources' - ваши активы –

+0

@ cricket_007 Я не использую maven. – psycotik

+1

Не используйте 'getPath', вместо этого просто используйте URL-адрес, возвращенный из 'getResource' – MadProgrammer

ответ

1

Основываясь на JavaDocs для org.pdfclown.documents.contents.entities.Image I «угадать» Image.get(String) пересылает вызов Image.get(File) используя String в качестве параметра конструктору File

Это не будет работать на основе URL пути. Вместо этого, вы должны смотреть в сторону Image.get(IInputStream) (почему эти интерфейсы не могут просто использовать то, что уже есть: P)

Так, рытье через API некоторые более IInputStream приводит к org.pdfclown.bytes.Buffer, не идеальный, но это ссылка.

Вы можете использовать Class#getStreamAsResource и записать это в ByteArrayOutputStream, который затем может дать вам byte[], который может затем перейти на Image.get(IInputStream)

Смежные вопросы