java imageicon - Bildressource wird geladen



from resource (4)

Ändern Sie zuerst diese Zeile:

image = ImageIO.read(getClass().getClassLoader().getResource("resources/icon.gif"));

zu diesem:

image = ImageIO.read(getClass().getResource("/resources/icon.gif"));

Weitere Informationen dazu , wo der Unterschied zwischen den beiden Ansätzen liegt, finden Sie in diesem Thread - Verschiedene Möglichkeiten zum Laden einer Ressource

Für Eclipse:

Für NetBeans:

Für IntelliJ IDEA:

  • Klicken Sie mit der rechten Maustaste auf den Ordner src des Projekts. Wählen Sie Neu -> Paket
  • Geben Sie unter Neues Paketdialogfeld den Namen des Pakets ein, sagen Sie Ressourcen . OK klicken
  • Rechtsklick Ressourcen-Paket . Wählen Sie Neu -> Paket
  • Geben Sie unter Neues Paketdialogfeld den Namen des Pakets ein, sagen Sie Bilder . OK klicken
  • Wählen Sie nun das Bild, das Sie dem Projekt hinzufügen möchten, kopieren Sie es. Klicken Sie mit der rechten Maustaste auf das resources.images-Paket in der IDE und wählen Sie Einfügen
  • Überprüfen Sie anhand des letzten Links, wie Sie jetzt auf diese Datei im Java-Code zugreifen können. Obwohl für dieses Beispiel würde man verwenden

    getClass().getResource("/resources/images/myImage.imageExtension");

  • Drücken Sie Shift + F10 , um das Projekt zu erstellen und auszuführen. Die Ordner für Ressourcen und Bilder werden automatisch im out- Ordner erstellt.

Wenn Sie es manuell tun:

  • So fügen Sie Bilder zu Ihrem Projekt hinzu
  • Wie man Ikonen benutzt
  • Eine kleine zusätzliche Erläuterung , wie im ersten Codebeispiel dieser Antwort angegeben.

BEISPIEL FÜR KURZBEZUGSKODEX (obwohl für weitere Details, ein wenig extra Verdeutlichung Link):

package swingtest;

import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.*;

/**
 * Created with IntelliJ IDEA.
 * User: Gagandeep Bali
 * Date: 7/1/14
 * Time: 9:44 AM
 * To change this template use File | Settings | File Templates.
 */
public class ImageExample {

    private MyPanel contentPane;

    private void displayGUI() {
        JFrame frame = new JFrame("Image Example");
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        contentPane = new MyPanel();

        frame.setContentPane(contentPane);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    private class MyPanel extends JPanel {

        private BufferedImage image;

        public MyPanel() {
            try {
                image = ImageIO.read(MyPanel.class.getResource("/resources/images/planetbackground.jpg"));
            } catch (IOException ioe) {
                ioe.printStackTrace();
            }
        }

        @Override
        public Dimension getPreferredSize() {
            return image == null ? new Dimension(400, 300): new Dimension(image.getWidth(), image.getHeight());
        }

        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.drawImage(image, 0, 0, this);
        }
    }

    public static void main(String[] args) {
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                new ImageExample().displayGUI();
            }
        };
        EventQueue.invokeLater(runnable);
    }
}

Ich habe einen Fehler für meine GUI. Wenn Sie versuchen, das Titelleistensymbol festzulegen, müssen Sie es in ein ausführbares JAR aufnehmen.

BufferedImage image = null;
try {
    image = ImageIO.read(getClass().getClassLoader().getResource("resources/icon.gif"));
} 
catch (IOException e) {
    e.printStackTrace();
}

frame.setIconImage(image);

Hier ist der Fehler, den ich bekomme:

Exception in thread "main" java.lang.IllegalArgumentException: input == null!
    at javax.imageio.ImageIO.read(Unknown Source)
    at GUI.<init>(GUI.java:39)
    at GUI.main(GUI.java:351)

Das Bild befindet sich im richtigen Verzeichnis, der Ordner "Ressourcen" ist der Stamm der Projektdatei


Es gibt eine viel einfachere Möglichkeit , ein Bild als Bildsymbol zu laden und zu setzen:

frame.setIconImage(
    new ImageIcon(getClass().getResource("/resources/icon.gif")).getImage());

Und das ist alles :)! Sie müssen nicht einmal einen try-catch-Block verwenden, da ImageIcon keine deklarierten Ausnahmen ImageIcon . Und dank getClass().getResource() funktioniert es sowohl vom Dateisystem als auch von einem Jar, je nachdem, wie Sie Ihre Anwendung ausführen.

Wenn Sie überprüfen müssen, ob das Image verfügbar ist, können Sie überprüfen, ob die von getResource() URL null :

URL url = getClass().getResource("/resources/icon.gif");
if (url == null)
    System.out.println( "Could not find image!" );
else
    frame.setIconImage(new ImageIcon(url).getImage());

Die Bilddateien müssen sich in den Verzeichnisressourcen resources/ in Ihrer JAR befinden, wie unter Verwendung von Symbolen und diesem example für das Verzeichnis images/ .


Wenn Sie die Retrofit-Bibliothek verwenden, können Sie den Header mit der @Header Header-Annotation ohne Verwendung von Interceptor direkt an eine API-Anforderung @Header . Hier ist ein Beispiel, das zeigt, wie Sie einen Header zu einer Retrofit-API-Anforderung hinzufügen.

@POST(apiURL)
void methodName(
        @Header(HeadersContract.HEADER_AUTHONRIZATION) String token,
        @Header(HeadersContract.HEADER_CLIENT_ID) String token,
        @Body TypedInput body,
        Callback<String> callback);

Ich hoffe es hilft!





java swing nullpointerexception awt embedded-resource