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?
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 ...
Funktioniert gut für mich. Prüfen Sie, was Sie möglicherweise anders haben.
Schritte:
Dateistruktur
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);
}
});
}
}
[Klicken Sie mit der rechten Maustaste auf das Projekt] → [Export] → [Lauffähige Jar-Datei] → [Einrichten der Konfiguration starten]
Profitieren
Zu Ihrer Information, das gleiche Setup läuft in Eclipse auch gut
Schritte:
Dateistruktur (Hinweisressourcen sehen aus wie ein einfacher Ordner)
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].
Wählen Sie auf der Registerkarte [Quellen] des Dialogfelds [Ordner hinzufügen] und im neuen Dialogfeld den Ordner [Ressourcen] aus
Nun befindet sich der Ordner contents des Ressourcenordners im Erstellungspfad (Beachten Sie das kleine Paket im Ordner
Neuer Code verwendet nicht mehr das Ressourcenpräfix für den Pfad
URL url = Main.class.getResource("/stackoverflow.png");
Gleich wie Schritt 3 und 4 von oben und profitieren!
UPDATE
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:
[Rechtsklick-Projekt] → [Eigenschaften] → [Einstellungen ausführen/debuggen]
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].
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
Wenn Sie nun wie im obigen Beispiel gezeigt exportieren, wählen Sie die Laufkonfiguration aus
Lass das Gefäß wie oben laufen.
EDIT
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:
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.
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.
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
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();
}
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
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));