2016-02-16 2 views
0

Вот ошибка я получаю:Как использовать 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/

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

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"); 
    } 
} 
+0

Является ли образ в исходной папке? –

+1

Возможный дубликат [Загрузка ресурсов с использованием getClass() .getResource()] (http://stackoverflow.com/questions/2343187/loading-resources-using-getclass-getresource) – DonyorM

+0

'getResource()' имеет несколько интересный способ указывать пути. См. Выше ссылку для получения дополнительной информации об этом. Короче говоря, проще всего разместить файл, который вы хотите прочитать в исходной папке/в вашем проекте, и указать путь как абсолютный путь, где «/» обозначает исходную папку. – DonyorM

ответ

0

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

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

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

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

0

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

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

ИЛИ

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

ИЛИ

this.getClass().getResourceAsStream(filename); 

читать дальше Different ways of loading a file as an InputStream

Смежные вопросы