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

Grafik aus jar einlesen...

0 views
Skip to first unread message

Martin Staudigel

unread,
Sep 5, 2004, 9:38:19 PM9/5/04
to
Hallo!
ich weiß, das wurde schon of durchgekaut, aber der Beitrag, der meinem
Problem am nächsten kommt, nämlich

news://de.comp.lang.java:119/c4c0c5$oj2$1...@fbi-news.cs.Uni-Dortmund.DE

will mir auch nicht richtig helfen.
Starte ich mein Programm von Eclipse aus ist es kein Problem mittels

myImage = Toolkit.getDefaultToolkit().getImage(fileName);

Grafiken zu laden und diese zu verwenden.
Wenn ich das Projekt aber in ein ausführbares jar-file exportieren
will, so werden die Grafiken nur angezeigt, wenn das Verzeichnis mit
den Grafiken im gleichen Verzeichnis wie das jar liegt. Das
Grafik-Verzeichnis innerhalb des jar führt nicht zum gewünschten
Erfolg, nur außerhalb.

Wenn ich nun Alexander Fierochs Variante
myImage=Toolkit.getDefaultToolkit().getImage(getClass().getResource(fileName));
versuche erhalte ich:

Uncaught error fetching image:
java.lang.NullPointerException
at sun.awt.image.URLImageSource.getConnection(URLImageSource.java:99)
at sun.awt.image.URLImageSource.getDecoder(URLImageSource.java:108)
atsun.awt.image.InputStreamImageSource.doFetch(InputStreamImageSource.java:248)
at sun.awt.image.ImageFetcher.fetchloop(ImageFetcher.java:172)
at sun.awt.image.ImageFetcher.run(ImageFetcher.java:136)

Vielleicht hat ja nochmal jemand Lust sich mit der Thematik zu
befassen, danke schonmal,

Martin

Frank Dreyer

unread,
Sep 5, 2004, 9:47:34 PM9/5/04
to
"Martin Staudigel" <MaSt...@web.de> schrieb:

> Wenn ich nun Alexander Fierochs Variante
>
myImage=Toolkit.getDefaultToolkit().getImage(getClass().getResource(fileName
));
> versuche erhalte ich:
>
> Uncaught error fetching image:
> java.lang.NullPointerException
> [...]
Wo liegt denn bei dir die Datei und was enthält fileName?


Martin Staudigel

unread,
Sep 5, 2004, 9:55:01 PM9/5/04
to
Hallo Frank,

Frank Dreyer schrieb:


>
> Wo liegt denn bei dir die Datei und was enthält fileName?
>
>

fileName enthält eine relativa Pfadangeabe, also konkret z.B.
"gfx/dateiname.gif", die ensprechende Datei liegt im jar-file im
Ordner gfx, welcher auf gleicher Ebene mit den obersten packages liegt.
Hätte nicht gedacht, daß so spät noch Antwort kommt, vielen Dank für
die Nachtschicht!

Grüße,
Martin

Karl Tauber

unread,
Sep 6, 2004, 4:36:23 AM9/6/04
to
Guten Morgen,
war wohl eine lange Nacht ;-)

Martin Staudigel wrote:
> fileName enthält eine relativa Pfadangeabe, also konkret z.B.
> "gfx/dateiname.gif", die ensprechende Datei liegt im jar-file im
> Ordner gfx, welcher auf gleicher Ebene mit den obersten packages
> liegt.

Genau das ist dein Problem.

Bei getClass().getResource("gfx/dateiname.gif") wird die Datei relativ zum
Package der von getClass() gelieferten Klasse gesucht. Probier es mal mit
getClass().getResource("/gfx/dateiname.gif").

Gruß,
Karl
www.jformdesigner.com


Walter Hipp

unread,
Sep 6, 2004, 4:53:27 AM9/6/04
to

"Martin Staudigel" <MaSt...@web.de> schrieb im Newsbeitrag
news:chgeub$ti0$1...@online.de...
[...] Grafik wird nicht geladen

> Wenn ich nun Alexander Fierochs Variante
>
myImage=Toolkit.getDefaultToolkit().getImage(getClass().getResource(fileName
));
versuche erhalte ich:

Uncaught error fetching image:
[...]

angenommene Hirarchie innerhalb des jars:
package eins
|-class eins (lädt Grafik aus images folder eins) (obige Methode
funktioniert)
|-images folder eins
|--package zwei
|-class zwei (lädt Grafik aus images folder eins) (obige Methode
funktioniert nicht)
|-images folder zwei
(wenn class zwei die Grafik aus images folder zwei lädt) (wird obige
Methode funktionieren)
|-- package drei usw.

daraus ergibt sich bei Verwendung obiger Methode: die Grafiken müssen
in der gleichen Verzeichnisebene wie die benutzende Klasse liegen, also ev.
mehrere img Verzeichnisse.
2. Möglichkeit:
ein imgages Verzeichnis in der top level ebene und z. B.:
java.net.URL url =
EineTopLevelKlasse.returnMainClass().getResource("images/info.gif");
wobei EineTopLevelKlasse die/eine Klasse auf top level ebene ist.
z..b in der Klasse, die die main Methode enthält:
...
public Class EineTopLevelKlasse
{
....
public Class returnMainClass()
{
return getClass();
}
diese Methode muß nun allen Klassen,
die auf das top level Verzeichnis "imgages" zugreifen, bekannt gemacht
werden.
...
}
weitere Möglichkeiten...
Gruß Walter


Martin Staudigel

unread,
Sep 6, 2004, 5:46:29 AM9/6/04
to
Karl Tauber schrieb:

> Genau das ist dein Problem.
>
> Bei getClass().getResource("gfx/dateiname.gif") wird die Datei relativ zum
> Package der von getClass() gelieferten Klasse gesucht. Probier es mal mit
> getClass().getResource("/gfx/dateiname.gif").

Hallo Karl, habe das Verzeichnis mit den Grafiken in das richtige
Verzeichnis (das der aufrufenden Klasse) gepackt und es funktioniert
wie gewünscht! Danke!

Grüße,
Martin

Martin Staudigel

unread,
Sep 6, 2004, 5:51:39 AM9/6/04
to
Hallo Walter,

Walter Hipp schrieb:


> daraus ergibt sich bei Verwendung obiger Methode: die Grafiken müssen
> in der gleichen Verzeichnisebene wie die benutzende Klasse liegen, also ev.
> mehrere img Verzeichnisse.

Da die aufrufende Klasse die einzige ist, die externe Grafiken
verwendet, habe ich mich für Variante 1 entschieden, aber danke für
die weiteren Erläuterungen, Möglichkeit 2 finde ich sehr elegant und
werde mir die Vorgehensweise für zukünftige Projekte merken...

Danke,
Martin

0 new messages