Как использовать 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