Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

OneJar und Ressourcen

0 views
Skip to first unread message

Oliver Neumann

unread,
Dec 3, 2005, 10:02:32 AM12/3/05
to
Hallo die Runde,

ich habe ein Projekt mit mehreren Packages. Eines davon ../lib beinhaltet
Gif-Grafiken die in anderen Packages benutzt werden. Nun will ich das Ganze
gern als ausführbare Jar haben und versuche das derzeit mit OneJar.

Soweit so gut..er erstellt alles wunderbar - nur beim Ausführen findet das
Programm die Grafiken nicht mehr.
In der main/main.jar sind die Grafiken immernoch im lib-Verzeichniss
vorhanden nur findet er die eben nicht.

Muss ich bei Ressourcen was beachten ? Die Grafiken werden im Code selber
relativ angesprochen:
new ImageIcon(getClass().getResource("/xxx/lib/JTree_Query.gif"));

Könnt ihr mir sagen was ich falsch mache ?


Danke für die Hilfe,
oliver

PS: FatJar hab ich auch schon probiert, aber der bringt mir beim Ausführen
Fehler von wegen doppelt vorhandener Klassen mit unterschiedlichen
Signaturen. Das konnte ich bisher auch nicht lösen...


Ferenc Hechler

unread,
Dec 4, 2005, 4:06:15 AM12/4/05
to
"Oliver Neumann" <tha....@web.de> schrieb

> ich habe ein Projekt mit mehreren Packages. Eines davon ../lib beinhaltet
> Gif-Grafiken die in anderen Packages benutzt werden. Nun will ich das
> Ganze
> gern als ausführbare Jar haben und versuche das derzeit mit OneJar.
>
> Muss ich bei Ressourcen was beachten ? Die Grafiken werden im Code selber
> relativ angesprochen:
> new ImageIcon(getClass().getResource("/xxx/lib/JTree_Query.gif"));

Verwende den aktuellen Thread-ClassLoader:

Thread.currentThread().getContextClassLoader().getResource(...)

Innerhalb eines One-Jars ist das der onejar-Classloader.

Viele Grüße,

feri


Oliver Neumann

unread,
Dec 4, 2005, 10:11:23 AM12/4/05
to
Hallo Feri,

> Verwende den aktuellen Thread-ClassLoader:
>
> Thread.currentThread().getContextClassLoader().getResource(...)

Also ich hab jetzt :
new
ImageIcon(Thread.currentThread().getContextClassLoader().getResource("xxx/li
b/JTree_Query.gif"));

Nun erhalte ich aber beim normalen Starten (d.h. in eclipse) eine
NullPointerExc:
java.lang.NullPointerException at
sun.awt.image.URLImageSource.getConnection(URLImageSource.java:97)


So meintest du das doch aber, oder ?!


Grüsse,
oliver


Ferenc Hechler

unread,
Dec 4, 2005, 12:44:45 PM12/4/05
to

"Oliver Neumann" <tha....@web.de> schrieb im Newsbeitrag
news:dmv0r3$ou9$02$1...@news.t-online.com...
> Also ich hab jetzt :
> new ImageIcon(Thread.currentThread().getContextClassLoader()

> .getResource("xxx/lib/JTree_Query.gif"));
>
> Nun erhalte ich aber beim normalen Starten (d.h. in eclipse) eine
> NullPointerExc:
> java.lang.NullPointerException at
> sun.awt.image.URLImageSource.getConnection(URLImageSource.java:97)
>
> So meintest du das doch aber, oder ?!
ja, so meinte ich das.

Damit der Class-Loader unter Eclipse die Resourcen-findet muss das
Resourcen-Verzeichnis
in den Classpath eingebunden werden.

Viele Grüße,

feri


Bastie

unread,
Dec 4, 2005, 12:45:22 PM12/4/05
to
Hallo,

ich nutze immer etwas in der Form wie:

this.getClass().getResource ("../lib/JTree_Query.gif")); // relativen
Pfad von der Klasse zur Resource


Wenn es sich um mehrere Resourcen handelt lege ich meist dort wo auch
die Bilder sind ein Klasse ResourceManager an, welche dann mit getImage
etc. das oben genannte Konstrukt (natürlich dann ohne relativen Pfad)
nutzt.

mfg
Bastie

Oliver Neumann

unread,
Dec 4, 2005, 1:24:42 PM12/4/05
to
Hallo Feri,

> ja, so meinte ich das.
>
> Damit der Class-Loader unter Eclipse die Resourcen-findet muss das
> Resourcen-Verzeichnis
> in den Classpath eingebunden werden.

super...hat geklappt.


Danke dir vielmals!
oliver


Ferenc Hechler

unread,
Dec 13, 2005, 3:04:14 PM12/13/05
to
"Oliver Neumann" <tha....@web.de> schrieb

> PS: FatJar hab ich auch schon probiert, aber der bringt mir beim Ausführen
> Fehler von wegen doppelt vorhandener Klassen mit unterschiedlichen
> Signaturen. Das konnte ich bisher auch nicht lösen...

Das neue Release 0.0.22 löst das Problem.

Viele Grüße,

feri


0 new messages