3 Stimmen

Hintergrund mit getResourceAsStream("Pfad")

Ich habe eine Ordnerstruktur wie diese.

Project/src/folder/folder/folder/xyz.java
       /img/background.jpg

Und ich möchte das background.jpg in ein JPanel in xyz.java . Nur für den Hintergrund. Und ich habe es gemacht mit

    private ImageIcon createImageIcon(String path, String description) {
    java.net.URL imgURL = getClass().getResource(path);

    if (imgURL != null) {
        return new ImageIcon(imgURL, description);
    } else {
        System.err.println("Couldn't find file: " + path);
        return null;
    }
}

Das Problem dabei ist jedoch, dass sich das Bild im selben Ordner befinden muss wie die xyz.java Ich habe ein wenig recherchiert und herausgefunden, dass dieses Problem mit folgenden Mitteln gelöst werden kann getResourceAsStream("path") aber ich kann nicht genug Wissen aufbringen, um dieses Problem zu lösen. Dies ist wichtig für mich, weil ich mein Programm als *.jar-Datei auf verschiedenen Betriebssystemen ausführen möchte.

Mein Problem ist, dass ich nicht verstehe, wie getRessourceAsStream("Pfad") anders funktionieren sollte. Ich habe kein Tutorial gefunden, das für mich passt. Es scheint, dass die meisten Leute es für verschiedene .jar Dateien oder Applets verwenden. Und ich weiß nicht, was ein Stream machen kann, wo getRessourceAsStream("path") anfängt (d.h. wie muss ich den Pfad schreiben). Es gibt so viele Wissenslücken...

Edit: Ich habe eine Lösung gefunden, bei der ich keinen Gesamtpfad angeben muss. img = ImageIO.read(getClass().getResource("../../../../img/bg_1.jpg")); Ich habe es nicht getestet, aber es sollte auch auf den anderen Systemen laufen. Das Problem ist aber, dass ich mein Programm nur in Eclipse starten kann. Wenn ich es in eine *.jar Datei exportiere, läuft es gut, aber es lädt das Bild nicht. Und es schrumpft das Fenster auf ein Minimum, obwohl ich setPreferredSize eingestellt habe. Also sollte ich vielleicht die Stream Lösung ausarbeiten. Aber jetzt ist es Zeit für's Bett.

Edit: Der relative Pfad funktioniert gut, wenn ich die Bilder in ein Paket packe. Nicht das, was ich wirklich wollte, aber nach 6h raten über dieses kleine Problem musste ich einige Fische durch meinen Ozean schwimmen zu bringen...

5voto

Da Sie nicht auf meinen Kommentar geantwortet haben, werde ich einige Fragen stellen und Vorschläge als Antwort machen:

Ist alles in einer Jar-Datei enthalten? Haben Sie versucht, den Pfad zum Bild oder das Bildverzeichnis in der Befehlszeile anzugeben und als Befehlszeilenparameter einzulesen? Und noch einmal: Warum verwenden Sie ImageIcons, wenn Sie ein Bild und nicht ein ImageIcon anzeigen wollen?

Bearbeiten 1
zu Ihren Kommentaren:

Ich verwende ein ImageIcon, weil ##java auf freenode.net mir sagte, dass es für meine Gewohnheiten passt.

Ich habe keine Ahnung, wer ##java ist oder welche "Gewohnheiten" Sie haben, aber die aktuelle Tatsache der Situation ist, dass Sie ein Bild verwenden und ein ImageIcon hat nichts damit zu tun, so wirklich, loszuwerden. Vereinfachen Sie und verwenden Sie nur, was Sie brauchen.

Meine erste Lösung war ungefähr so: img = ImageIO.read(new File("path")); Aber es braucht auch den vollständigen Pfad und nicht irgendeinen URL-Pfad, den ich von html kenne.

Die Pfadanforderungen für ImageIO.read unterscheiden sich nicht von dem, was Sie zu tun versuchen. Es ist eine gute Ergänzung zu Ihrer Lösung.

Die Jar-Datei sollte ohne irgendwelche Extras auf verschiedenen Betriebssystemen laufen. Ich brauche nur eine davon.

Sie haben uns immer noch nicht gesagt, ob Ihre Bilder in einem Jar sind oder nicht, und wo die Bilder in Bezug auf Ihre Klassendateien sind, denn das ist der Schlüssel zur Verwendung von Ressourcen - das Laden der Ressourcen relativ zum Ort der Klassendateien.

3voto

camickr Punkte 315810

Bilder mit getResource laden

Die Verwendung eines ImageIcons auf einem JLabel ist ideal, wenn Sie das Bild in seiner tatsächlichen Größe anzeigen.

Wenn Sie das Bild (dynamisch) skalieren müssen, müssen Sie das Bild individuell bemalen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X