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,
_
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.
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?
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
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.
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.
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.
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,
_
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.