Java: установка иконки в jar-приложении - PullRequest
2 голосов
/ 22 сентября 2011

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

При запуске приложения из Eclipse я могу изменить значок, отображаемый в окне приложения:

BufferedImage image = null;
try {
   image = ImageIO.read(this.getClass().getResource("AT42.png"));
} catch (IOException e) {e.printStackTrace();}
this.setIconImage(image);   

Изображение помещено в мою папку .class files.

Когда я запускаю его из Eclipse, он показывает значок, но когда я создаю исполняемый jar и выполняю его, я получаю следующее исключение:

Exception in thread "main" java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
Caused by: java.lang.IllegalArgumentException: input == null!
        at javax.imageio.ImageIO.read(Unknown Source)
        at com.tools.at4.UserInterface.<init>(UserInterface.java:43)
        at com.tools.at4.GeneradorInformes.main(GeneradorInformes.java:8)
        ... 5 more

Я полагаю, что значок не включен вфайл jar, мой вопрос, есть ли способ включить его, чтобы при запуске файла jar создаваемые окна отображали мой значок вместо чашки Java?

Спасибо !!

Ответы [ 2 ]

1 голос
/ 22 сентября 2011

С указанием пути, который вы используете, ваше изображение должно быть помещено в корень вашего jar-файла.Предполагая, что ваше изображение находится в каталоге вашего проекта под названием «images», эта задача ANT поместит изображения в корень вашей фляги:

<target name="construct-jar" depends="compile,javadoc">
    <copy todir="${build.dir}">
        <fileset dir="images"/>
    </copy>
    <jar destfile="${dist.dir}/${jar.name}" basedir="${build.dir}"/>
</target>
0 голосов
/ 22 сентября 2011

Если я помещу файл в файл .class, я должен изменить свой код следующим образом:

image = ImageIO.read(this.getClass().getResource("/AT42.png"));

Спасибо !!

...