2014-01-25 3 views
0

Я изучаю основы GUI Java на затмение, однако всякий раз, когда я, кажется, скомпилировать эту программу, я получаю сообщение об ошибке компилятора:Исключение в потоке «главный» java.lang.NullPointerException Java GUI

Exception in thread "main" java.lang.NullPointerException 
    at javax.swing.ImageIcon.<init>(Unknown Source) 
    at ClassTwo.<init>(ClassTwo.java:11) 
    at ClassOne.main(ClassOne.java:6) 

I искал что-нибудь от линии ошибка возникла из, но я не могу найти ничего плохого с ним:

private Icon[] pics = {new ImageIcon(getClass().getResource(filename[0])),new ImageIcon(getClass().getResource(filename[1]))}; 

Любой вход на моих ошибках был бы весьма признателен. А вот полный код, если это поможет:

//ClassOne.Java 
import javax.swing.JFrame; 

class ClassOne { 
    public static void main(String[] args){ 

     ClassTwo go = new ClassTwo(); 
     go.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     go.setSize(300,200); 
     go.setVisible(true); 
    } 
} 


//ClassTwo.Java 
import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class ClassTwo extends JFrame { 

    private JComboBox box; 
    private JLabel picture; 

    private static String[] filename = {"b.png", "x.png"}; 
    private Icon[] pics = {new ImageIcon(getClass().getResource(filename[0])),new ImageIcon(getClass().getResource(filename[1]))}; 

    public ClassTwo(){ 
     super("Title"); 
     setLayout(new FlowLayout()); 

     box = new JComboBox(filename); 

     box.addItemListener(
       new ItemListener(){ //anonymous class that implements item listener 
        public void itemStateChanged(ItemEvent event){ 
         if(event.getStateChange()==ItemEvent.SELECTED) //what was selected 
          picture.setIcon(pics[box.getSelectedIndex()]); 
        } 
       } 
     ); 

     add(box); 
     picture=new JLabel(pics[0]); 
     add(picture); 
    } 
} 
+0

Попробуйте разбить его. Определите элемент как неинициализированный (private Icon [] pics;), затем в конструкторе сначала создайте три разные строки (pics = new Icon [2]), затем (pics [0] = new ImageIcon (getClass(). GetResource (имя файла) [0]))) Это должно помочь рассказать вам, где проблема. Вы можете даже разбить вызовы getClass() и getResource() на разные строки, которые могут сузить проблему. – MikeHelland

+0

. Это хорошая идея. – user3183586

ответ

2

Оказывается, что мои два файла ресурса x.png и b.png были в папке проекта, а затем папку пакета. Извините за то, что потратил ваше время.

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