gpt4 book ai didi

java - 什么可能会阻止可运行的 JAR 打开?

转载 作者:行者123 更新时间:2023-12-01 23:08:25 24 4
gpt4 key购买 nike

我正在尝试将我的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");
}
}
}
}

如果您知道这段代码是否可以阻止 jar 打开,请告诉我问题出在哪里,我将不胜感激。

谢谢。

最佳答案

你说异常发生在这里:

URL urlFolder = getClass().getClassLoader().getResource("platforms");
File[] resources = new File(urlFolder.getPath()).listFiles();
for(int i = 0; i < resources.length; i++) { // THIS LINE

这意味着resourcesnull

这又意味着 listFiles() 返回 null

这意味着返回的任何 urlFolder.getPath() 都不是文件系统中目录的可解析路径名。 (参见javadoc for listFiles()),

这是预期的......如果“平台”资源位于 JAR 文件中。 (在这种情况下,URL 将是一个“jar:”URL,并且 getPath() 不会返回您需要的内容。确实,它不能,因为您需要的目录名不在文件中根本没有系统。)

这是一个问题,其答案为该问题提供了一些可能的解决方案:

...但它并不漂亮。或者 @fge 的 Java 7+ 解决方案。

关于java - 什么可能会阻止可运行的 JAR 打开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22417980/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com