2009-07-08 10 views
21

Ich benutze einige Bilder in JFrame, ich habe einen Pfad angegeben, um Bild in das Feld des Rahmens zu laden, aber wenn ich Glas der Anwendung gemacht habe, zeigt es keine Bilder an.
Wo sollte ich das Bild platzieren?
Wie soll ich den Pfad angeben?Bild zu JAR Java hinzufügen

setIconImage(Toolkit.getDefaultToolkit().getImage(
       "D:\\RFT\\src\\dailogBox\\dump.jpg")); 

so habe ich getan.

Antwort

1

Es gibt viele Möglichkeiten, beispielsweise einen Ordner mit dem Namen Ressourcen in Ihrer JAR-Datei machen und die Bilder verweisen von dort einen relativen Pfad ....

+0

Ich habe Bild in den Quellordner eingefügt, wie relativen Pfad festlegen? –

0

das Bild in Ihrem Glas als Ressource hinzufügen, dann (Angenommen, das Jar ist auf Ihrem Klassenpfad), verwenden Sie den Klassenlader zu load it as a stream.

+2

Kannst du mir ein Beispiel dafür geben? –

+0

getClass(). GetResourceAsStream ("/ icons/closed_folder_small.png"); –

41

Erster Schritt: Platzieren Sie Ihr Bild an einem definierten Ort in Ihrer JAR-Datei. Wenn Sie es in den src-Ordner stellen, wird Ihre IDE oder Ihr Build-Tool es automatisch in das JAR packen. Ansonsten prüfe die Dokumentation deines IDE/Build-Tools, an welchem ​​Ort du es ablegen musst.

Zweiter Schritt: Greifen Sie über Ihr Programm auf die Datei zu. Ich nehme an, Sie legen es in das Paket (den Pfad in Ihrem JAR) package1/package2 und die Datei heißt dump.jpg. In diesem Fall rufen Sie.

setIconImage(Toolkit.getDefaultToolkit().getImage(getClass().getResource("/package1/package2/dump.jpg"))); 

getClass() getResource (...) gibt eine URL für eine Ressource auf dem Classpath. Sie starten den Pfad im Klassenpfad mit einem '/' und verwenden den vollständigen Pfad/Pakete zu Ihrer Ressource, getrennt durch '/'.

+0

hat gerade das gleiche Problem für mich gelöst. Danke :) – nedlud

+0

@Mnementh Wie kann das funktionieren, wenn mein BufferedImage statisch ist? – Kareem

+3

@KareemMesbah, würden Sie es als MyClass.class.getResource verweisen ("/ Pfad/zu/file.jpg") – haventchecked

-2

Der einfache Weg, dies zu tun ist, dass der Ordner Ihr Bild parallel zur JAR-Datei ist. Beispiel:

Say in den Code, den Sie das Bild wie folgt aufrufen:

pic = new ImageIcon("Pics/buttonpic.jpg"); 

Dies bedeutet, dass Ihr Bild buttonpic genannt werden würde, und wird in einem Ordner namens Bilder in Ihrem Projekt-Verzeichnis. Nachdem Sie Ihre JAR-Datei erstellt haben, kopieren Sie diesen PICS-Ordner in den gleichen Ordner, in dem sich Ihre JAR-Datei befindet.

Beispiel: Wenn sich Ihre JAR-Datei auf Ihrem Desktop befindet, legen Sie den PICS-Ordner auf dem Desktop ab. Wenn Sie jetzt die JAR-Datei ausführen, werden Ihre Bilder korrekt funktionieren. Jetzt, um die Tatsache zu vertuschen, dass Sie Ihren Pics-Ordner neben Ihrer JAR-Datei haben müssen, können Sie einen neuen Ordner erstellen und in diesem Ordner Ihr jar und den Pics-Ordner platzieren. Klicken Sie dann mit der rechten Maustaste auf das JAR und erstellen Sie eine Verknüpfung, platzieren Sie dann diese Verknüpfung auf dem Desktop oder dort, wo Sie nur die JAR-Datei haben möchten, und platzieren Sie den erstellten neuen Ordner an der Stelle, an der Sie ihn ausblenden möchten.

+0

Ich denke, dass Sie diese downvotes becouse bevorzugten Weg ist, alle Ihre Vermögenswerte in JAR-Archiv mit Anwendung zu speichern. Auf diese Weise müssen Sie nur eine Datei verteilen. – Matka

2

zuerst ein Paket erstellen (Say Bilder) unter Quellcode-Pakete

Kopie alle Ihre Bilder zu diesem Paket (wenn Sie ein Paket erstellen, einen Ordner im Namen Ihres Pakets in Ihrem Projekt src Ordner erstellt werden so kopieren, Bilder, um es)

Sie können Ihre Bilder von Ihrem Programm zugreifen, als

Beispiel 1:

 this.setIconImage(Toolkit.getDefaultToolkit().getImage(getClass().getResource("/images/yourimagename"))); 

Beispiel 2:

 URL imageurl = getClass().getResource("/images/imagename");//assuming your package name is images 
     Image myPicture = Toolkit.getDefaultToolkit().getImage(imageurl); 
     JLabel piclabel = new JLabel(new ImageIcon(myPicture)); 
     piclabel.setBounds(0,0,myPicture.getWidth(null),myPicture.getHeight(null)); 

nun diese JLabel verwenden piclabel

6

Dies ist der beste Weg, um alle Bilder und Symbole in einer JAR-App zu behandeln.

Sobald Sie alle Ihre Bilder und Symbole in eine eigene JAR-Datei gezippt haben - Konfigurieren Sie den Build-Pfad, indem Sie die JAR-Datei für Bilder in Ihre Bibliotheksregisterkarte einfügen, sodass sie jetzt in Ihrem Klassenpfad enthalten ist.

Dann verwenden Sie einfach die folgenden 3x Codezeilen zu Beginn Ihres Konstruktor jedes Bild zugreifen, die Sie für alles, was mit einem SystemTray Bild benötigen, die nicht die einfache ImageIcon der als Hauptsymbol akzeptiert (komisch ich weiß) . Die 3x Linien sind:

URL iconUrl = this.getClass().getResource("/image-iconb.png"); 
    Toolkit tk = this.getToolkit(); 
    someimgicon = tk.getImage(iconUrl); 

(someimgicon ist nur ein Konstruktor deklariert Bildgröße) Jetzt können Sie ein Fenster-Icon-Set so einfach wie:

setIconImage(someimgicon); 

und zugleich Verwenden Sie die gleiche Variable, wenn Sie das System TrayIcon einstellen, indem Sie Folgendes angeben:

trayIcon = new TrayIcon(someimgicon, "SystemTray Demo", popupMenu); 

Mit dem oben genannten Verfahren können Sie Bilder oder ImageIcons einfach und zentral deklarieren, ohne das Risiko einzugehen, Bildressourcen nicht an der richtigen Stelle zu halten. Es hält es schön und ordentlich, mit der JAR, die alle Ihre Bilder automatisch zur Laufzeit und Verteilung Ihres Programms enthält.

Als Bonus, sobald die JAR in Ihrem Classpath registriert ist - können Sie ohne viel Aufhebens zu einer anderen Bilder in der gleichen JAR jederzeit halten das Hinzufügen - Alles funktioniert einfach und die hinzugefügten Bilder sofort verfügbar sind Ihre App

Viel besser aus meiner Sicht.

+0

Wir sollten alle unsere Bilder und Symbole in eine eigene JAR-Datei komprimieren und dann von unserer IDE eine andere JAR-Datei erstellen lassen, die die ursprüngliche JAR-Datei einkapselt? Was?! Warum – Hatefiend

0

In Netbeans 8.1, was ich getan habe, ist, den Ordner von Icons und anderen Bildern Ressourcen innerhalb der src Ordner in der Projektdatei namens aufzunehmen. Also, wenn ich Jar Datei erstellen, ist der Ordner dort enthalten.

  • src (Java-Dateien in Quelle packges sind hier)
  • ** PAKET SIE Projekt mit dem Namen **

    : Der Dateibaum so sein sollte
    • file.java
  • Ressourcen

    • image.jpg

Der Code sollte wie:

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