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