2013-10-17 129 views
0

我創建了一個我的java遊戲的.jar文件。該程序運行良好的Java編譯器,但是當我嘗試運行.jar文件時,它沒有顯示任何結果。我再次使用運行它通過CMD:運行.jar文件時出錯

java -jar PokemonGame.jar` 

...它給了我一個錯誤:

Exception in thread "main" java.lang.NullPointerException 
at javax.swing.ImageIcon.(init)(ImageIcon.java:167) 
at MainFile.(init)(MainFile.java:25) 
at MainFile.main(MainFile.java:86) 

我跟蹤我評論的行號:

public class MainFile extends JPanel implements MouseListener{ 
    MainFile m; 
    static JFrame mainWindow = new JFrame("POKEMON MEMORY GAME"); 
    static TimerFile timerPanel; 
    static GridFile gridPanel; 
    static LogsFile logsPanel; 
    static ButtonMenuFile buttonMenuPanel; 
    JPanel blockPanel; 
    URL url; 
    BufferedImage winlose; 
    JPanel winlosePanel; 
    //MainFile line 25 
    ImageIcon gameBackground = new ImageIcon(getClass().getResource("Assets\\Pokedex.png")); 
    Image gameImage = gameBackground.getImage(); 
    GameSoundFile gameSound = new GameSoundFile(); 
    GameSoundFile screenSound = new GameSoundFile(); 

    //...some codes here 

    public static void main(String[] args) {  
     //MainFile line 86 
     MainFile mainPanel = new MainFile(); 
     mainPanel.setMainPanel(mainPanel);   

     mainWindow.add(mainPanel); 
     mainWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     mainWindow.pack(); 
     mainWindow.setLocationRelativeTo(null); 
     mainWindow.setResizable(false); 
     mainWindow.setVisible(true); 

    } 

    public MainFile(){ 
     //...MainFile codes here 
    } 
} 

誰能告訴我這裏的缺陷,因爲它似乎是一個奇怪的行爲,這個程序可以用java編譯器運行,但不能運行在.jar可執行文件上。

+0

似乎無法獲取圖像文件。 –

+0

'getClass()。getResource(「Assets \\ Pokedex.png」)''null'? –

+0

但它能夠使用java編譯器運行。它在運行時顯示沒有錯誤。只有當我將它轉換爲顯示錯誤的.jar文件時。 – Rapharlo

回答

0

Pokedex.png到罐子頂部級別:

jar uf PokemonGame.jar Pokedex.png 

,並引用它像:

getClass().getResource("/Pokedex.png") 
+0

想創建一個包嗎? – Rapharlo

+0

@Rapharlo更像是創建或修改一個zip文件。 –

+0

感謝您的洞察力。將嘗試並評估結果。 – Rapharlo

0

在JAR文件,Windows目錄分隔符不存在。使用/分隔您的目錄,並假定該文件在那裏,它將被找到。

+0

哦。所以這意味着我必須重新編輯我的所有資產//[文件名]資產/? – Rapharlo

+0

更像Assets \\ filename成爲資產/文件名 –