0

내 Java 프로젝트에 문제가 있습니다. 배경 이미지가있는 JFrame을 만들려고하지만 javax.swing.ImageIcon을 사용하여 배경 JLabel 아이콘을 설정하면 프로그램을 실행할 때 콘솔에 예외 오류가 표시되고 이미지가 작동하지 않습니다. 빈 JFrame 만 표시합니다. 여기 내 코드는 다음과 같습니다Swing ImageIcon 오류가 발생하여 이미지가 나타나지 않음

@SuppressWarnings("serial") 
public class MainUI extends JFrame { 
    public static void main(String[] args) { 
     new MainUI().build(); // Calls build method 
    } 
    private void build() { 
     // Builds JFrame 
     JFrame frame = new JFrame(); 
     JPanel base = new JPanel(); 
     JLabel background = new JLabel(); 
     frame.setVisible(true); 
     frame.setTitle("Space Age"); 
     frame.setSize(640,480); 
     frame.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 
     frame.setAutoRequestFocus(false); 
     frame.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); 
     frame.setLocationRelativeTo(null); 
     base.setSize(640,480); 
     base.setAlignmentX(0.0F); 
     base.setAlignmentY(0.0F); 
     base.setBackground(new java.awt.Color(255,255,255)); 
     background.setSize(640,480); 
     background.setAlignmentX(0.0F); 
     background.setAlignmentY(0.0F); 
     background.setIcon(new ImageIcon(getClass().getResource("spaceage.images.starfield.png"))); 
     frame.add(base); 
     frame.add(background); 
    } 
} 

이 오류 메시지가 모습입니다 :

Exception in thread "main" java.lang.NullPointerException 
    at javax.swing.ImageIcon.<init>(Unknown Source) 
    at spaceage.src.MainUI.build(MainUI.java:36) 
    at spaceage.src.MainUI.main(MainUI.java:15) 

누군가가 내가 잘못 어떻게 제대로 이미지 표시를 만드는 방법 무슨 짓을했는지 말해 줄 수 있습니까? 미리 감사드립니다. 산티아고

+0

대부분의 경우 존재하지 않는 경로에서 이미지를로드하고 있습니다. 새로운 ImageIcon (getClass(). getResource ("/ spaceage/images/starfield.png")))'을 사용해주세요. '/'문자 추가에 유의하십시오. 또한 '.' 당신이 실제로 볼 수있는 하위 폴더 – Aarowaim

+0

나는 이미 그것을 시도했습니다; 점들을 사용하는 것과 같습니다. 오류는 여전히 슬래시에서 발생하므로 이미지 경로와 관련이 없다고 생각하지 않습니다. –

+0

제 경험상, .jar 파일의 이미지로드는 전체 파일 경로를 사용하는 것보다 훨씬 어렵고 부두가 제대로 작동해야합니다. 나는'images' 패키지를 사용하고'getClass(). getResource ("/ images/tileset.png")'를 호출하는 수많은 시도 후에 내 프로젝트 중 하나에서 작동하도록했습니다. – Aarowaim

답변

0

내가 잘못한 것을 알았습니다. 이 :

background.setIcon(new ImageIcon(getClass().getResource("spaceage.images.starfield.png"))); 

필요한이 변경 될 : 내가 잘못 내 이미지의 경로를 입력하기 때문에

background.setIcon(new ImageIcon(getClass().getResource("/spaceage/images/starfield.png"))); 

가 나는 NullPointerException을 가지고, 그래서 getResource() 이미지를 찾아 null을 반환 할 수 없었다.