Bild aus externer jar-Datei

EGJSoldier

Erfahrenes Mitglied
Hallo alle zusammen,
ich stehe hier gerade vor nem Problem. Hier ersteinmal der QT:

Java:
  public Image getImage(){
	try{
	  URL jarURL = new File("E:/java/library/standard_icon/jlfgr-1_0.jar").toURI().toURL();
	  ClassLoader classLoader = new URLClassLoader(new URL[]{jarURL});
	  InputStream is = new BufferedInputStream(classLoader.getResourceAsStream("toolbarButtonGraphics/development/Applet16.gif"));
	  
      /*ByteArrayOutputStream bai = new ByteArrayOutputStream();
      bai.write(is.read());
      System.out.println(bai.toString());
      byte[] buf = bai.toByteArray();
      for(int i = 0; i < buf.length; i++){
        System.out.println(buf[i] + ", " + i);
      }
      System.out.println("--------");
    
      Image img = Toolkit.getDefaultToolkit().createImage(buf);*/
	  System.out.println("lskg");
	  Image img = ImageIO.read(is);
    
      return img;
	}
	catch(Exception e){
      e.printStackTrace();
      return null;
	}
  }

So, das ist meine Methode getImage, die aus einer Jar- Datei, die irgendwo auf dem Rechner ist, ein Bild lesen soll. So den Pfad habe ich angegeben. Alles schön und gut. Mein Problem ist jetzt: Wie kriege ich das Imageobjekt als Rückgabe. Ich habe es ja im InputStream drin, aber wie kriege ich das da wieder raus****

Ich hoffe, ihr könnt mir helfen. Ich bedanke mich schonmal im vorraus.

David
 
Java:
URL imagePath = this.class.getResource("/de/tutorials/resources/bild.png");
oder alternativ
Java:
URL imagePath = Class.getClass.getResource("/de/tutorials/resources/bild.png");
um auf die Datei "bild.png" im Paket "de.tutorials.resources" zuzugreifen
Und am besten nutzt du gleich ImageIcon, sofern du das Bild nicht bearbeiten willst:
Java:
ImageIcon bild = new ImageIcon(this.class.getResource("/de/tutorials/resources/bild.png"));

EDIT:
Einen Pfad brauchst du nicht angeben, sofern die andere jar-Datei im gleichen Verzeichnis liegt, siehe auch http://openbook.galileocomputing.de...17_002.htm#mjc2905c008847dad671feaa7501f0d82f

Wenn du auf ein Bild in einem Jar-File in einem anderen Verzeichnis zugreifen willst, solltest du unbedingt relative Pfade verwenden und die Datei am besten über das jar://-Protokoll/URI Scheme zugreifen, siehe http://download.oracle.com/javase/6/docs/api/java/net/JarURLConnection.html
 
Zuletzt bearbeitet:
So, das ist meine Methode getImage, die aus einer Jar- Datei, die irgendwo auf dem Rechner ist, ein Bild lesen soll.

Es ist je eine externe Jar Datei. Diese Datei hat eigentlich nichts mit meinem Projektverzeichniss zu tun. Aber das ist ja nicht das Problem. das Problem ist, den InputStream in ein Bild "umzuwandeln".

David
 
Also erlich : warum du dir da den Umweg über einen URLClassLoader machst versteh ich nicht.
Ich würde das JAR erstmal ganz normal als JarFile öffnen , mit der Enum die du über JarFile.entries() bekommst nach der Datei suchen , einen InputStream öffnen und das bild mit ImageIO laden. Also eigentlich nur etwas anders vom laden des Jar als du.
Was mich nur wundert : WAS funktioniert denn nicht so wie es soll ? Weil ImageIO.read(InputStream) macht doch genau das was du willst ... oder ?
 
Also das Imageobjekt scheint leer zu sein. Ich kann es nicht so genau feststellen. Wenn ich abfrage, ob das Objekt null ist, dann kommt manchmal true und manchmal false raus. Keine Ahnung woran das liegen könnte?

Edit: Hat sich erledigt. Das Problem ist ein anderes. Und zwar hat er ein Problem damit, das GIF Bild anzuzeigen. Andere Informationen, wie Weite und Höhe, kann ich auslesen.

Trotzdem danke für die Hilfe.

David
 
Zuletzt bearbeitet:
Zurück