Как использовать getClass и getResource?

Вот ошибка, которую я получаю:

Using directory  file:/D:/CCSF%20Docs/CS111B/Java%20Projects/LabelDemo2.java/bin/ 
Image url is null 
Exception in thread "main" java.lang.NullPointerException
    at javax.swing.ImageIcon.<init>(Unknown Source) 
    at LabelDemo2.<init>(LabelDemo2.java:23) 
    at LabelDemo2.main(LabelDemo2.java:46)

Может кто-нибудь сказать мне, почему я не могу загрузить изображение? Изображение java.jpg находится в D:/CCSF%20Docs/CS111B/Java%20Projects/LabelDemo2.java/bin/

Я не знаю, почему я получаю нулевое исключение / ошибку.

import java.awt.*;
import javax.swing.*;

public class LabelDemo2 extends JFrame {
    private ImageIcon image1;
    private JLabel label1;
    private ImageIcon image2;
    private JLabel label2;
    private ImageIcon image3;
    private JLabel label3;
    private static final long serialVersionUID = 1L;

    LabelDemo2() {
        setLayout(new FlowLayout());

        System.out.println("Using directory " + getClass().getResource(""));         
        System.out.println("Image url is " + getClass().getResource("java.jpg"));         
        image1 = new ImageIcon(getClass().getResource("java.jpg"));
        label1 = new JLabel(image1);
        add(label1);


        label1 = new JLabel(image1);
        add(label1);

        image2 = new ImageIcon(getClass().getResource("java.jpg"));

        label2 = new JLabel(image2);
        add(label2);

        image3 = new ImageIcon(getClass().getResource("java.jpg"));

        label3 = new JLabel(image3);
        add(label3);
    }

    public static void main (String args[]) {
        LabelDemo2 gui = new LabelDemo2();
        gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        gui.setVisible(true);
        gui.pack();
        gui.setTitle("Label Demo");
    }
}

2 ответа

Если image находится в вашей исходной папке, то вам нравится ниже, чтобы прочитать Image

getClass().getResource("/java.jpg")

Просто положи / или же \\

Если он находится за пределами вашей исходной папки, вы можете прочитать его InputStream с абсолютным путем

Ты можешь попробовать

ClassLoader classLoader = this.getClass().getClassLoader();
InputStream in = classLoader.getResourceAsStream(path);

ИЛИ ЖЕ

ClassPathResource fileReference = new ClassPathResource(filename);  
InputStream in = fileReference.getInputStream();

ИЛИ ЖЕ

this.getClass().getResourceAsStream(filename);

Дальнейшее чтение Различные способы загрузки файла как InputStream

Другие вопросы по тегам