Portal > Foren > Java > Desktop-Applikationen und Grafik > Projektübergreifender Bilderzugriff in jar-Dateien
Antwort
 
Themen-Optionen Thema durchsuchen
Alt 20.03.2007, 11:12 Nach oben    #1
Neuer Benutzer
 
Registriert seit: 12.08.2005
Beiträge: 5
Standard Projektübergreifender Bilderzugriff in jar-Dateien

Hi,
ich hab oft hier gelesen und vom einen oder anderen Tipp profitiert. Ich hoffe ihr könnt mir auch diesmal helfen.
Ich habe eine kleine Anwendung erstellt, bei der Bilder als Icon für Buttons und dergleichen benutzt werden. Zum lesen und laden der Bilder verwende ich folgenden Code:

Code:
String path = imageDirectory + "pic1.gif";
ImageIcon myIcon = createImageIcon(path,""); java.net.URL imgURL = Main.class.getResource(path); if (imgURL != null) { return new ImageIcon(imgURL, description); } else { System.err.println("Couldn't find file: " + path); return null;
}
nachdem ich den Pfad zu den Bilder wie folgt definiert habe:
Code:
private String imageDirectory = "/images/images_subfolder/";

wenn die Bilder in einem anderen (Eclipse) Projekt leigen verwende ich:
Code:
 private String imageDirectory = "/proj_1/../images/subfolder/";
Wenn ich von Eclipse aus laufen lasse ist alles in Ordnung. Wenn ich in Eclipse aus dem Code und den Bildern ein ausführbares jar erstelle funktionnert alles, nur so lange ich im gleichen Projekt bleibe. Möchte ich auf Bilder zugreifen, die in einem anderen Projekt liegen, wird null zurückgegeben (also das Bild im jar nicht gefunden, obwohl es doch drin ist).

Weiß einer, wie ich dabei vorgehen muss oder was ich gerade falsch mache? Wäre nett.

Gruss
Mau.
mekaMau ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.03.2007, 11:23 Nach oben    #2
Projektleiter
 
Registriert seit: 30.11.2005
Ort: Bottrop
Beiträge: 1.134
Standard

Hi, generell halte ich das für keine gute Idee. Sobald ich die Position einer deiner Jar-Dateien verändert, stimmt der Pfad nicht mehr.
Pack die Bilder doch stattdessen in ein eigenes JAR und füge das in den Classpath ein.

Beispiel: Ich verwende häufig die Nuvola-Icons, also habe ich sie mir in ein (ziemlich großes) JAR gepackt, dass ich in jedes neue Projekt kopiere (habe grundsätzlich ein "lib"-Verzeichnis, in dem ich third-party Bibliotheken lagere) und dann zum Classpath hinzufüge.
Verschwendet zwar etwas Platz, ist aber auch beim ausliefern des Programms hilfreich.

Wenn es dir nur um Programme geht, die ausschließlich du benutzt, kannst du die JAR auch an einen festen Ort legen, und den dann absolut verwenden (also auch wieder zum Classpath hinzufügen). Oder du lässt das mit dem packen ganz weg und machst das da:
Code:
ImageIcon icon = new ImageIcon("C:\\icons\\hello.png");
Hilft dir das?
pago ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.03.2007, 13:40 Nach oben    #3
Neuer Benutzer
 
Registriert seit: 12.08.2005
Beiträge: 5
Standard

Hallo Pago,
und vielen Dank für die Antwort.

Zitat:
Zitat von pago Beitrag anzeigen
Wenn es dir nur um Programme geht, die ausschließlich du benutzt ...
Nein, es geht hier um eine mittlere Anwendung, die von einigen Leuten erstellt wurde und aus vielen Projekten und packages besteht. Eigentlich sollte/muss ich nachher mit build herumhantieren aber ich wollte die Angelegenheit der jar+Bilder zunächst mit einen kleinen überschaubaren Beispiel testen, um zu sehen ob und wie es geht.

Zitat:
Zitat von pago Beitrag anzeigen
...Hilft dir das?
ich fürchte nicht ganz. ich habe nur eine jar-Datei, die ich zum ausführen benutze. Die wiederum enthält die Resourcen (Bilder) die ich brauche. Ich hätte schon gerne gewusst, wie ich da gezielt auf Bilder zugreifen kann, die in der jar-Verzeichnisstruktur vorhanden sind.

im übrigen funktioniert das Packen der Bilder in ein jar und das Ausführen auch nur solange gut, solange ich das programm von eclipse aus starte. Auf der Eingabezeile oder als jar tut es dann nicht mehr (wegen "fehlender" Bilder). Ich weiß nicht, ob ich einen Fehler bei der Pfadangabe mache (die im nicht komprimierten Fall funktioniert) oder generell beim zusammenpacken der Datei.

Ich hoffe du oder jemand anderes weiß was.

Gruss
Mau.
mekaMau ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 20.03.2007, 13:51 Nach oben    #4
Neuer Benutzer
 
Registriert seit: 12.08.2005
Beiträge: 5
Standard

Was ich vergessen hab zu sagen, bei den Resourcen geht es nur um ein paar Bilder, die als icon für buttons oder ähnliches dienen sollen. Also keine große Fluktuation in der Hinsicht zu erwarten. Ausserdem soll das ganze zusammengepackt werden, damit es anderen zur Verfügung gestellt werden kann, die sich nicht unbedingt mit den innereien des programms beschäftigen müssen. So viel nur um den Rahmen ein wenig zu beleuchten.
mekaMau ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.03.2007, 08:45 Nach oben    #5
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.516
Standard

Hi,
ich weiß nicht genau, ob das dort beschriebe Problem mit deinem gleich zu setzen ist , aber vielleicht hilft es ja?

http://www.mrunix.de/forums/showthre...767#post164955
Ben ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.03.2007, 09:23 Nach oben    #6
Erfahrener Benutzer
 
Benutzerbild von JumperII
 
Registriert seit: 27.02.2006
Beiträge: 159
Standard

Hilft die Standard-Lösung weiter?

Code:
URL url = this.class.getResource( "<file_with_path>");
Image image = Toolkit.getDefaultToolkit().getImage( url);
ansonsten gibt es unter Class neben der getResource auch eine Funktion getResourceAsStream.

Wenn die Lokation unklar ist, kann man den ClassLoader hinzu ziehen und damit übergreifend (alles, was der ClassLoader halt bei sich hält) abfragen:
Code:
Enumeration<URL> resenum = this.class.getClassLoader().findResources( "<file_with_path>");
while( resenum.hasMoreElements()) {
  System.out.println( resenum.nextElement());
}
Gruß,
Jumper, the II.
JumperII ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 23.03.2007, 16:23 Nach oben    #7
Neuer Benutzer
 
Registriert seit: 12.08.2005
Beiträge: 5
Standard

Hi nochmal,
irgendwie war ich zu lang angemeldet und wurde dann wohl rausgeschmiessen mit samt meinem Geschriebenen.

Jedenfalls:
Zitat:
Zitat von JumperII Beitrag anzeigen
Hilft die Standard-Lösung weiter?
Code:
URL url = this.class.getResource( "<file_with_path>");
Image image = Toolkit.getDefaultToolkit().getImage( url);
Ja das scheint es irgendwie zu sein, was ich von vorne herein hatte. Ich bin nochmal in den Code tief eingetaucht und habe festgestellt, dass bei den Namen der Bilddateien mal klein geschrieben und groß aufgerufen wurde, mal umgekehrt. Meine Vermutung ist, dass eclipse combiniert mit windows da großzügiger ist als java alleine mit jar.
Jedenfalls kriege ich jetzt schon viel weniger Null-Pointer und kann schon viele der Icons darstellen. Noch habe ich sie nicht alle korrekt gesetzt.

Ich melde mich, falls es das war aber zunächst nochmal danke allen für die Inputs.

Viele Grüße und schönes Wochenende

Mau
mekaMau ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 26.03.2007, 10:38 Nach oben    #8
Neuer Benutzer
 
Registriert seit: 12.08.2005
Beiträge: 5
Standard

SO,
nachdem ich alle Dateinamen angeglichen und sonstige Kleinigkeiten behoben habe funktioniert alles auf der Kommandozeile genauso wie von Eclipse aus.
Die Lektion: bzgl. Groß- und Kleinschreibung sind Eclipse und Windows ziemlich tolerant (ist vorerst nur eine Vermutung von mir, vielleicht ist es auch was anderes, jedenfalls ging es, nachdem ich dies behoben habe).

Ich musste allerdings feststellen, dass die Fragestellung, so wie ich sie eingangs formuliert habe (Projektübergriefend ...) trotzdem noch nicht beantwortet ist, denn die Zugriffe auf Bilddateien erfolgen hier immer projektintern. Aber vielleicht klären wir das dann ein anderes Mal. Das, was ich für ein Problem in diesem Fall hatte ist zunächst einmal gelöst.

Also vielen Dank nochmal Pago, Ben und Jumper. Weiter so!!

Viele Grüße
Mau.
mekaMau ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 28.03.2007, 16:58 Nach oben    #9
Martin Eisengardt
 
Registriert seit: 30.03.2006
Ort: Pfinztal
Beiträge: 355
Standard

In Projekt A gibt es ein Quellverzeichnis, bei dem unter /lib/images/ABC.jpg ein Bild zu finden ist.
Projekt B will drauf zugreifen.

Lösung: Eclipse, Rechte Maustaste auf Projekt A, Eigenschaften. Unter Java-Build-path, "export" das Quellverzeichnis anhaken, wo das Bildchen drin ist.
Projekt B anklicken, Eigenschaften, Java Build Path. Projekt B ist abhängig von Projekt A.

Nun kannst du wie gewohnt problemlos von Projekt B auf das Image drauf zugreifen, ohne zusätzlichen Verzeichnishumbug. Wie wenn es bei dir lokal im gleichen Jar wäre.

Am Ende, also in Echt-Betrieb müssen beide Jars verfügbar sein und via ClassLoader eingebunden sein. Dann lässt sich über den normalen Weg des ClassLoaders auf die Datei zugreifen. Das obige Beispiel: this.class.getResource( "<file_with_path>");
ist dafür ein guter Weg.
__________________
Open Sourcing the Online Gaming Universe
PHP/SQL/Java/C++/Assembler.
Seit Jahren Mitglied und Entwickler in einem der wohl größten Java-Projekte der Welt: http://weblogs.java.net/blog/hansmul...e_desktop.html
mepeisen ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
PingBacks sind an
RefBacks sind aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Dateien aus SVN 1 auschecken, in SVN 2 einchecken, keine eigenen Änderungen vorhanden Ben Tools, Server, Betriebssysteme 2 21.03.2007 18:53
Cache leeren um mit file Dateien zu durchsuchen Tryzero PHP-Programmierung 12 12.03.2007 10:13
[PHP] FTP-Funktionen in PHP nutzen MrNiceGuy Tutorials 0 24.05.2006 14:18
Zugriff auf Dateien in Jar Binary Allgemeine Java-Programmierung 2 14.03.2006 13:52
Eclipse jar erstellen mr.no Eclipse 2 24.07.2005 18:36


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:51 Uhr.


Powered by vBulletin® Version 3.7.4 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45