Java 运行.jar文件时出错

Java 运行.jar文件时出错,java,jar,Java,Jar,我为我的java游戏创建了一个.jar文件。该程序在java编译器中运行良好,但当我尝试运行.jar文件时,没有显示任何结果。我使用以下命令通过CMD再次运行它: java -jar PokemonGame.jar` …它给了我一个错误: Exception in thread "main" java.lang.NullPointerException at javax.swing.ImageIcon.(init)(ImageIcon.java:167) at MainFile.(init)(

我为我的java游戏创建了一个.jar文件。该程序在java编译器中运行良好,但当我尝试运行.jar文件时,没有显示任何结果。我使用以下命令通过CMD再次运行它:

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可执行文件上运行,这似乎是一种奇怪的行为。

Pack
Pokedex.png
进入jar的顶层:

jar uf PokemonGame.jar Pokedex.png
然后像这样引用它:

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

在JAR文件中,windows目录分隔符字符不存在。使用
/
分隔目录,假设文件在那里,就会找到它。

似乎无法获取图像文件。
getClass().getResource(“Assets\\Pokedex.png”)
null
?但它可以使用java编译器运行。它在运行期间没有显示任何错误。只有当我将其转换为.jar文件时,它才显示出该错误。您确定该图像位于jar内,还是位于可以从jar访问的相对路径中?该图像位于assets文件夹内。是否需要在.jar文件中编译所有形式的文档(图像、声音)?就像创建包一样?@Rapharlo更像是创建或修改zip文件。感谢您的帮助。将尝试并评估结果。问题:jar uf PokemonGame.jar Pokedex.png,我是否必须在资产文件夹的目录中执行此操作,或者在根文件夹中执行此操作就足够了?@Rapharlo如果将其添加到根文件夹中,您可以在回答中引用它。如果您将其添加到文件夹
Assets
,则必须引用它
/Assets/Pokedex.png
。这意味着我必须将所有资产//[filename]重新编辑为Assets/?更像Assets\\filename变成Assets/filename