【发布时间】:2014-04-20 12:15:06
【问题描述】:
我正在尝试将我的 java 项目(它是一个游戏)导出到一个可运行的 JAR 文件中,但不幸的是,即使我这样做了:文件>导出>Java>可运行的 JAR 文件>正确选择我的主类,当我尝试要打开它,它不会做任何事情(在 Windows 上)或在菜单栏中打开然后意外关闭(在 Mac 上)。
我怀疑这是因为我加载资源的方式。谁能告诉我这可能是什么原因造成的?
编辑:这就是问题所在,我在第一个 for 循环中的 resources.lenght 中得到 NullPointerException:此方法扫描我的资源中的文件夹并读取符合平台类型的每个图像(游戏是平台游戏) 从我的资源中提取并将它们保存在 ArrayList 中。
private void readImages() {
URL urlFolder = getClass().getClassLoader().getResource("platforms");
File[] resources = new File(urlFolder.getPath()).listFiles();
for(int i = 0; i < resources.length; i++) {
String fileName = resources[i].getName();
String name = fileName.substring(0, fileName.indexOf('_')).toUpperCase();
try {
EnumPlatformTypes type = EnumPlatformTypes.valueOf(name);
variantsForType[getTypeNumber(type)]++;
} catch(Exception e) {
System.out.println("Erreur de nommage du fichier " + fileName);
}
}
for(int i = 0; i < NUMBER_OF_TYPES; i++) {
platformSprites.add(new Image[variantsForType[i]]);
String type = EnumPlatformTypes.values()[i].toString();
for(int k = 0; k < variantsForType[i] ; k++) {
String fileName = type.substring(0, 1) + type.substring(1, type.length()).toLowerCase() + "_" + k + ".png";
URL url = getClass().getClassLoader().getResource("platforms/" + fileName);
if(url == null) {
System.out.println("Incapable de lire le fichier d'image " + fileName);
return;
}
try {
platformSprites.get(i)[k] = ImageIO.read(url);
} catch(IOException e) {
System.out.println("IOException lors de la lecture avec ImageIO");
}
}
}
}
如果您知道此代码是否可以阻止打开罐子,如果您能告诉我问题出在哪里,我将不胜感激。
谢谢。
【问题讨论】:
-
使用
java -jar <file>运行JAR,这样您就可以看到错误是什么。将堆栈跟踪添加到您的问题中。 -
尝试从命令行运行它 (
java -jar ...)。你的任何错误都会被打印出来吗? -
(感谢我不知道的命令)所以错误是这一行上的 nullPointerException:for(int i = 0; i
-
File[] resources = new File(urlFolder.getPath()).listFiles(); -
另外,不要抓住
Exception!这还将捕获所有未经检查的异常(包括NullPointerException等)
标签: java image file jar resources