it-swarm.com.de

Eclipse exportierte Runable JAR zeigt keine Bilder an

Meine Bilder werden nicht geladen, wenn eine aus Eclipse exportierte JAR-Datei ausgeführt wird.

Ich habe die Bilder in einem Ressourcenklassenpaket. Ich habe auch einen Quellordner für Bilder ausprobiert.

Funktioniert perfekt, wenn von Eclipse geladen. Die Bilder befinden sich in der exportierten JAR-Datei und können daher problemlos exportiert werden.

Ich habe es versucht:

label.setIcon(new ImageIcon(MainFrame.class.getResource("/resources/header.jpg")));

Ich habe auch versucht:

URL url = getClass().getResource("/resources/header.jpg");
Image image = Toolkit.getDefaultToolkit().getImage(url);
label.setIcon(new ImageIcon(image));

Und:

try
{
    label.setIcon(new  ImageIcon(ImageIO.read(getClass().getResource("/resources/header.jpg"))));
}
catch (IOException e1)
{
    e1.printStackTrace();
}

Irgendwelche Vorschläge?

30
DeNitE Appz

Das Problem war, ich hatte dieses Projekt in meinem Windows-Profil ... das hatte ein "!" drin ... (DeNitE! -> war der Name meines Windows-Profils)

Sobald ich es in DeNitE (ohne das!) Geändert habe, hat es gut funktioniert ...

1
DeNitE Appz

Funktioniert gut für mich. Prüfen Sie, was Sie möglicherweise anders haben. 

Beispiel 1: (Ressourcen in src)

Schritte:

  1. Dateistruktur

    enter image description here

  2. Code

    package com.stackoverflow.test;
    
    import Java.net.URL;
    import javax.swing.*;  // Wild carded for brevity. 
                           // Actual code imports single classes
    public class Main {
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable(){
                public void run() {
                    URL url = Main.class.getResource(
                                         "/resources/stackoverflow.png");
                    ImageIcon icon = new ImageIcon(url);
                    JFrame frame = new JFrame();
                    frame.add(new JLabel(icon));
                    frame.pack();
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    frame.setLocationRelativeTo(null);
                    frame.setVisible(true);
                }
            });
        }
    }
    
  3. [Klicken Sie mit der rechten Maustaste auf das Projekt] → [Export] → [Lauffähige Jar-Datei] → [Einrichten der Konfiguration starten]

    enter image description here

  4. Profitieren

    enter image description here

Zu Ihrer Information, das gleiche Setup läuft in Eclipse auch gut


Beispiel 2: (Ressourcen nicht in src - aber in Projekt)

Schritte:

  1. Dateistruktur (Hinweisressourcen sehen aus wie ein einfacher Ordner)

    enter image description here

  2. Was wir jetzt tun müssen, ist, die Ressourcen auf den Erstellungspfad zu setzen. Dies bedeutet, dass alles im Ordner (außer dem Ordner selbst) im Klassenpfad abgelegt wird

    • Klicken Sie mit der rechten Maustaste auf das Projekt und gehen Sie zu [Erstellungspfad] → [Erstellungspfad konfigurieren].

      enter image description here

    • Wählen Sie auf der Registerkarte [Quellen] des Dialogfelds [Ordner hinzufügen] und im neuen Dialogfeld den Ordner [Ressourcen] aus

      enter image description here

    • Nun befindet sich der Ordner contents des Ressourcenordners im Erstellungspfad (Beachten Sie das kleine Paket im Ordner

      enter image description here

  3. Neuer Code verwendet nicht mehr das Ressourcenpräfix für den Pfad

    URL url = Main.class.getResource("/stackoverflow.png");
    
  4. Gleich wie Schritt 3 und 4 von oben und profitieren!


UPDATE

Einrichtung Starten Sie die Konfiguration

Sobald Sie die Klasse ausführen (d. H. Rechtsklick auf Klasse und Als Java-Anwendung ausführen), wird im Allgemeinen eine Laufkonfiguration eingerichtet. Sie benötigen dies, um den Startpunkt im Manifest festzulegen. Aber hier ist, wie man es manuell macht.

Schritte:

  1. [Rechtsklick-Projekt] → [Eigenschaften] → [Einstellungen ausführen/debuggen]

    enter image description here Sie können sehen, dass ich bereits eine Run-Konfiguration habe (die implizit durch einfaches Ausführen der Klasse festgelegt wird). Um jedoch eine neue zu erstellen, wählen Sie [Neu] → [Java-Anwendung].

  2. Erstellen Sie einen Namen für die Laufkonfiguration und suchen oder geben Sie eine Hauptstartklasse ein. In meinem Fall ist es die com.stackoverflow.test.Main-Klasse

    enter image description here

  3. Wenn Sie nun wie im obigen Beispiel gezeigt exportieren, wählen Sie die Laufkonfiguration aus

    enter image description here

  4. Lass das Gefäß wie oben laufen.


EDIT

Ergebnis zu prüfen auf

Manifest:

Manifest-Version: 1.0
Rsrc-Class-Path: ./
Class-Path: .
Rsrc-Main-Class: com.stackoverflow.test.Main
Main-Class: org.Eclipse.jdt.internal.jarinjarloader.JarRsrcLoader

Extrahiertes Glas:

enter image description here

72
Paul Samsotha

Ich habe das gefunden, als du dich verändert hast: 

Packen Sie die erforderlichen Bibliotheken in das generierte Glas

zu

Extrahieren Sie die erforderlichen Bibliotheken in das generierte Glas

in der Setup-Launch-Konfiguration hat es für mich funktioniert.

 Extract Required Libraries Button

2
sazzy4o

Wenn Sie Ihre Ressourcendatei und Ihre JAR-Datei an demselben Speicherort ablegen, sollte dies ebenfalls funktionieren. Der einzige Nachteil ist, dass Sie die Ressourcen jederzeit mit der JAR-Datei haben müssen.

Wenn das kein Problem ist, können Sie es auf diese Weise tun.

1
Nevets17

Ich habe das gleiche Problem ... Sie können dies verwenden.

Image Icon= new ImageIcon(new WE4().getClass().getResource("IC.jpg"))

Hier ist WE4 mein Klassenkonstrukturname . Ich hoffe es hilft.

1

Für das Erstellen einer ausführbaren JAR-Datei aus Eclipse wird auf den Artikel "Erstellen ausführbarer Gläser in Eclipse (oder einer anderen IDE ... oder von Hand)" verwiesen: ( https://www.cefns.nau.edu/~edo /Classes/CS477_WWW/Docs/RunnableJarsinEclipse.html ), es wurde erwähnt, dass wir vier Dinge als tun müssen

  1. Stellen Sie sicher, dass Sie ein Paket für unseren Code erstellen, und nicht nur ein Projekt in Eclipse
  2. Erstellen Sie das Unterpaket (Unterordner) für unsere Ressourcendateien unter dem Hauptpaket unseres Codes (beachten Sie, dass sich das Unterpaket unter Hauptpaket befindet, nicht nur im Projekt).
  3. alle Dateiverweise von getResource () abrufen (URL-Referenz abrufen)
  4. Export von Dateien als ausführbare JAR-Datei in Eclipse (Datei -> Exportieren ... -> Lauffähige JAR-Dateien auswählen -> Nächste -> ...)

Aber für eine Image-Datei im obigen Beispielcode des obigen Artikels wird nur ImageIcon erstellt, es wird jedoch kein SWT-Image erstellt. Im Internet gibt es viele Fragen, wie SWT-Image von der URL abgerufen oder wie ImageIcon in SWT-Image konvertiert werden kann. Unten ist der Beispielcode für das Abrufen des SWT-Bildes von der URL.

Image imgSWT=null;  // Image class is the SWT Image class
ImageDescriptor imgDesc=null;
Java.net.URL imgURL = YourClassName.class.getResource("path/image_filename");

if (imgURL != null) {
    imgDesc = ImageDescriptor.createFromURL(imgURL);
    imgSWT = imgDesc.createImage();
}
1
phchen2

Dies ist wahrscheinlich die einfachste Methode, es sei denn, Sie müssen Ihre Dateien im Glas haben:

header = ImageIO.read(new File("./resources/header.jpeg"));

header muss ein Image/BufferedImage sein. Dies geht zu dem Ordner, in dem sich das ausführbare Glas befindet, und sucht nach einem Ordner namens resources. http://i.stack.imgur.com/x8xtO.png

0
TheChubbyPanda

Zwei einfache Schritte:

1 - Fügen Sie den Ordner zum Build-Pfad hinzu.

2 - Verwenden Sie dies:

    InputStream url = this.getClass().getResourceAsStream("/load04.gif");
    myImageView.setImage(new Image(url));
0