PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Images im JAR



herzberg
19-11-2004, 12:50
Hi
Ich habe mir eine kleine Applikation geschrieben in der ich einige Images eingebaut habe. Solange wie ich das Programm nicht zu einem JAR packe läuft alles sehr gut. Packe ich es jedoch findet es kein Bild mehr. Lasse ich das Verzeichnis mit den Images außerhalb des JAR läufts wieder. Das ist aber nicht so gut, wenn neue Bilder hinzukommen und man vergisst diese mitzugeben.
Muss ich die Pfade im Programm anpassen? Mir fällt langsam nichts mehr ein! Vielleicht hatte ja einer von euch ein ähnliches Problem.
Danke

anda_skoa
19-11-2004, 14:25
Poste mal den Code den du zum Laden verwendest.

Ciao,
_

Lin728
19-11-2004, 15:16
Class.getResource gibt dir ne URL zurück, über wleche du eigentlich bilder erzeugen können müsstest....

herzberg
19-11-2004, 16:55
Der Code zum Laden der Images ist Folgender:

JMenuItem exit = new JMenuItem("Beenden", new ImageIcon("Images\\fileclose.png"));

Erstellen kann ich die Bilder, aber nicht wenn diese mit im JAR liegen.

Lin728
19-11-2004, 17:09
einfach statt filenamen url übergeben, das hmmm, steht genau so oben

herzberg
20-11-2004, 11:10
Wer lesen kann, ist klar im Vorteil...



Dann lese dir mal mein Problem richtig durch. Ich will nicht ein Bild von einer URL laden. Das Prog läuft lokal auf meinem Rechner. Das Bild liegt direkt in dem JAR-Packet. Welche URL sollte ich deiner Meinung nach angeben?

fs111
20-11-2004, 11:26
Dann lese dir mal mein Problem richtig durch. Ich will nicht ein Bild von einer URL laden. Das Prog läuft lokal auf meinem Rechner. Das Bild liegt direkt in dem JAR-Packet. Welche URL sollte ich deiner Meinung nach angeben?


Eine URL ist ein Uniform Ressource Locator, d.h. die genaue Angabe zum Auffinden einer Ressource. Du scheinst das hier mit einer HTTP-URL gleichzusetzen, das ist aber falsch, denn eine URL kann auch ein anderes Protokoll beinhalten, wie etwa file:/ usf. Genauso gestaltet sich das ganze hier, denn es handelt sich nicht im HTTP, aber dennoch um eine URL:

Du bekommst Dein Bild aus dem Jar folgendermaßen:



URL fooUrl = getClass().getResource("pics/foo.png");
ImageIcon fooIcon = new ImageIcon(fooUrl);


Das ImageIcon kannste dann auf beliebige Komponenten setzen.

HTH

fs111

Lin728
20-11-2004, 14:37
Drum heißt die Methode ja auch getResource.

Wer javadocs lesen kann, hat gewonnen *g*

herzberg
20-11-2004, 21:45
Entchuldigt Leute!
Aber mit dem 1.Kommentar von ceisserer konnte ich echt nichts anfangen.

Danke an alle

herzberg
08-03-2005, 18:36
URL fooUrl = getClass().getResource("pics/foo.png");
ImageIcon fooIcon = new ImageIcon(fooUrl);
fs111

Danke fs111 für deinen Tip. Das funktioniert aber leider nicht, was du geschrieben hast. Es geht aber wunderbar mit:


URL url = getClass().getClassLoader().getSystemResource(path );
if(url!=null){
ImageIcon icon = new ImageIcon(url);
}

Sollte das Bild jedoch nicht gefunden werden ist die URL Referenz null. Deshalb sollte man entweder die NullPointerException abfangen oder das ImageIcon erst garnicht erzeugen.

fs111
09-03-2005, 21:02
Also unter JDK 1.4.2 geht das, welche Version hast Du denn?

fs111

RogerJFX
13-04-2005, 09:22
this.getClass().getResource("/res/image.png") geht so gut wie immer. Man sollte allerdings das führende '/' (hier vor "res") nicht vergessen. Da wird selten was gefunden.

Sym
13-04-2005, 11:01
this.getClass().getResource("/res/image.png") geht so gut wie immer. Man sollte allerdings das führende '/' (hier vor "res") nicht vergessen. Da wird selten was gefunden.
Das kommt ganz auf den Pfad drauf an. Wenn Du schon auf ein / angewiesen bist, dann bitte ./ damit es auch vernünftig klappt. ;)

Was hier wieder ausgegraben wurde... ;)

RogerJFX
13-04-2005, 14:13
Falsch. Das mag vielleicht in HTML so sein. Hier nicht.

:eek:

RogerJFX
13-04-2005, 14:23
vielleicht ". /res/image.png". Also ein whitespace nach dem Punkt. Das mag sein. Kann ich mir aber kaum vorstellen.

Sym
15-04-2005, 12:12
Falsch. Das mag vielleicht in HTML so sein. Hier nicht.

:eek:
Doch, doch. Ist unter Linux so. Funktioniert auf meinem Mac. Und bisher hat sich kein Windows-User bei meinen Programmen beschwert - aber vielleicht werden sie auch nicht genutzt... :p

RogerJFX
16-04-2005, 08:17
Ich habe das jetzt mal probiert. Wieder nix. Weder im JAR noch außerhalb will das funktionieren.

Es ist mir aber letztlich nicht ganz klar, was der Punkt im Java-Kontext bedeutet. Das ist zumindest nicht so wie auf der bash.

Ich muß nunmehr vermuten, daß sich "./image.png" über package-Grenzen hinwegsetzt, d.h. daß das Image gleich neben der Class (egal wo im package) liegen muß, während "/image.png" so etwas wie "/root/image.png" ist, wobei hier /root der Ausgangsordner des JAR wäre.

Howdy, das wird sogleich getestet.

RogerJFX
16-04-2005, 08:20
Das ist es. Trotzdem: wer haut denn Resourcen in ein Package?

Tsts!

:D

Cheers,

Roger

RogerJFX
16-04-2005, 08:24
Nee, sorry, ich habe versehentlich nicht das JAR getestet, sondern die nicht eingetütete Variante.

Also im JAR geht es wieder nicht.

:confused:

Cheers,

Roger

anda_skoa
16-04-2005, 16:28
Es ist mir aber letztlich nicht ganz klar, was der Punkt im Java-Kontext bedeutet. Das ist zumindest nicht so wie auf der bash.

Das dürfte ziemlich sicher das selbe bedeuten, denn da die Resourcenamen wie Pfade aussehen, wird die Pfadsemantik auch beabsichtig sein.
Und in einem Pfad bedeutet ./ immer relativ zum aktuellen Verzeichnis/Bezugspunkt.

Es soll sich für das Programm ja auch nichts ändern wenn die Resource in einem JAR statt in einem Verzeichnis oder auf einem Server statt in einem Verzeichnis ist.
Den Unterschied muß der zuständige ClassLoader berücksichtigen

Ciao,
_