0

我有我的java項目的問題。我想使用背景圖像製作JFrame,但是當我使用javax.swing.ImageIcon設置背景JLabel的圖標時,它在控制檯中顯示異常錯誤,當我運行程序並且圖像不起作用時,只顯示一個空白的JFrame。這裏是我的代碼:擺動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文件加載圖像比使用完整文件路徑要困難得多,幾乎似乎要求voodoo才能正常工作。我使用'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

相關問題