Frage

Wenn ich eine Java-App von Eclipse aus ausführe, wird mein ImageIcon einwandfrei angezeigt.

Aber nach dem Erstellen eines Glases ist der Weg zum Bild offensichtlich vermasselt.

Gibt es eine Möglichkeit, zur Laufzeit ein Bild aus dem JAR zu extrahieren, damit ich es dann öffnen kann?Oder gibt es einen besseren Weg, dies zu tun?

Ich möchte, wenn möglich, eine einzelne JAR-Datei verteilen.

War es hilfreich?

Lösung

Um eine zu erstellen ImageIcon Aus einer Bilddatei in denselben JAR-Dateien wird Ihr Code geladen:

new javax.swing.ImageIcon(getClass().getResource("myimage.jpeg"))

Class.getResource gibt eine URL einer Ressource zurück (oder null!). ImageIcon verfügt über einen Konstruktor, der von einer URL geladen wird.

Informationen zum Erstellen einer URL für eine Ressource in einem JAR, die sich nicht in Ihrem „Klassenpfad“ befindet, finden Sie in der Dokumentation zu java.net.JarURLConnection.

Andere Tipps

Sie können etwas versuchen wie:

InputStream stream = this.getClass().getClassLoader().getResourceAsStream("/images/image.jpg");

In Ihrer JAR-Datei befindet sich möglicherweise die folgende Verzeichnisstruktur:

MyJAR.jar
- com (Klassendateien hier)
- Bilder
----image.jpg

Dies funktioniert für mich, um das Hintergrundbild des Inhaltsbereichs zu laden und festzulegen:

jar (oder Build-Pfad) enthält:

 - com
 - img
 ---- bg.png

Java enthält:

JFrame f = new JFrame("Testing load resource from jar");
try {
    BufferedImage bg = ImageIO.read(getClass().getResource("/img/bg.png"));
    f.setContentPane(new ImagePanel(bg));
} catch (IOException e) {
    e.printStackTrace();
}

Getestet und funktioniert sowohl in der Jar- als auch in der Unjarred-Ausführung (so lautet der Fachausdruck).

Übrigens getClass().getClassLoader().getResourceAsStream("/img/bg.png") - was ich zuerst versucht habe - hat mir einen Null-InputStream zurückgegeben.

In Netbeans 8.1 habe ich den Ordner mit Symbolen und anderen aufgerufenen Bildern eingefügt Ressourcen im Inneren src Ordner in der Projektdatei.Also wann immer ich baue Krug Datei ist der Ordner dort enthalten. Der Dateibaum sollte wie folgt aussehen:

  • src (Java-Dateien in Quellpaketen finden Sie hier)
  • **PAKET, DAS SIE IM PROJEKT GENANNT HABEN**

    • Datei.java
  • Ressourcen

    • Bild.jpg

Der Code sollte wie folgt aussehen:

jToggleButton1.setIcon(new javax.swing.ImageIcon(this.getClass().getResource("/resources/image.jpg")));

Das Laden eines Bilds aus einer Jar-Datei während der Laufzeit ist dasselbe wie das Laden eines Bilds, wenn es von einer IDE, z. B. Netbeans, ausgeführt wird. Der Unterschied besteht darin, dass beim Laden eines Bilds aus einer JAR-Datei der Pfad korrekt sein muss Groß- und Kleinschreibung beachten (sehr wichtig).Das funktioniert bei mir

 image1 = new javax.swing.ImageIcon(getClass().getResource("/Pictures/firstgame/habitat1.jpg"));
        img = image1.getImage().getScaledInstance(lblhabitat1.getWidth(), lblhabitat1.getHeight(), Image.SCALE_SMOOTH);
        lblhabitat1.setIcon(new ImageIcon(img));

Wenn p in „/Pictures/firstgame/habitat1.jpg“ in Kleinbuchstaben geschrieben ist, funktioniert es nicht.Überprüfen Sie Leerzeichen, Groß- und Kleinschreibung und Rechtschreibung

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top