Java 什么可能阻止可运行的JAR打开?
我正试图将我的java项目(这是一个游戏)导出到一个可运行的JAR文件中,但不幸的是,尽管我这样做了:文件>导出>java>可运行的JAR文件>正确选择了我的主类,但当我尝试打开它时,它什么都不做(在windows上),或者在菜单栏中打开,然后意外关闭(在mac上) 我怀疑这是因为我加载资源的方式。有谁能告诉我这可能是什么原因吗 编辑:这就是问题所在,我在resources.lenght的第一个for循环中得到了一个NullPointerException:这个方法扫描我的资源中的一个文件夹,从我的资源中读取符合平台类型(游戏是platformer)的每个图像,并将它们保存在ArrayList中Java 什么可能阻止可运行的JAR打开?,java,image,file,jar,resources,Java,Image,File,Jar,Resources,我正试图将我的java项目(这是一个游戏)导出到一个可运行的JAR文件中,但不幸的是,尽管我这样做了:文件>导出>java>可运行的JAR文件>正确选择了我的主类,但当我尝试打开它时,它什么都不做(在windows上),或者在菜单栏中打开,然后意外关闭(在mac上) 我怀疑这是因为我加载资源的方式。有谁能告诉我这可能是什么原因吗 编辑:这就是问题所在,我在resources.lenght的第一个for循环中得到了一个NullPointerException:这个方法扫描我的资源中的一个文件夹,从
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");
}
}
}
}
private void readImages(){
URL urlFolder=getClass().getClassLoader().getResource(“平台”);
File[]resources=新文件(urlFolder.getPath()).listFiles();
for(int i=0;i
如果您知道这段代码是否可以阻止jar打开,如果您能告诉我问题出在哪里,我将不胜感激
谢谢。您说这里发生了异常:
URL urlFolder = getClass().getClassLoader().getResource("platforms");
File[] resources = new File(urlFolder.getPath()).listFiles();
for(int i = 0; i < resources.length; i++) { // THIS LINE
URL urlFolder=getClass().getClassLoader().getResource(“平台”);
File[]resources=新文件(urlFolder.getPath()).listFiles();
对于(inti=0;i
这意味着resources
为null
这又意味着listFiles()
返回null
这意味着返回的任何urlFolder.getPath()
都不是文件系统中目录的可解析路径名
如果“platforms”资源在JAR文件中,那么这是预期的。(在这种情况下,URL将是一个“JAR:”URL,getPath()
将不会返回您需要的内容。事实上,它不能返回,因为您需要的目录名根本不在文件系统中。)
以下是一个问题,其答案为这个问题提供了一些可能的解决方案:
…但它并不漂亮。或者@fge的Java 7+解决方案。您说异常发生在这里:
URL urlFolder = getClass().getClassLoader().getResource("platforms");
File[] resources = new File(urlFolder.getPath()).listFiles();
for(int i = 0; i < resources.length; i++) { // THIS LINE
URL urlFolder=getClass().getClassLoader().getResource(“平台”);
File[]resources=新文件(urlFolder.getPath()).listFiles();
对于(inti=0;i
这意味着resources
为null
这又意味着listFiles()
返回null
这意味着返回的任何urlFolder.getPath()
都不是文件系统中目录的可解析路径名
如果“platforms”资源在JAR文件中,那么这是预期的。(在这种情况下,URL将是一个“JAR:”URL,getPath()
将不会返回您需要的内容。事实上,它不能返回,因为您需要的目录名根本不在文件系统中。)
以下是一个问题,其答案为这个问题提供了一些可能的解决方案:
…但它并不漂亮。或者@fge的Java 7+解决方案。您说异常发生在这里:
URL urlFolder = getClass().getClassLoader().getResource("platforms");
File[] resources = new File(urlFolder.getPath()).listFiles();
for(int i = 0; i < resources.length; i++) { // THIS LINE
URL urlFolder=getClass().getClassLoader().getResource(“平台”);
File[]resources=新文件(urlFolder.getPath()).listFiles();
对于(inti=0;i
这意味着resources
为null
这又意味着listFiles()
返回null
这意味着返回的任何urlFolder.getPath()
都不是文件系统中目录的可解析路径名
如果“platforms”资源在JAR文件中,那么这是预期的。(在这种情况下,URL将是一个“JAR:”URL,getPath()
将不会返回您需要的内容。事实上,它不能返回,因为您需要的目录名根本不在文件系统中。)
以下是一个问题,其答案为这个问题提供了一些可能的解决方案:
…但它并不漂亮。或者@fge的Java 7+解决方案。您说异常发生在这里:
URL urlFolder = getClass().getClassLoader().getResource("platforms");
File[] resources = new File(urlFolder.getPath()).listFiles();
for(int i = 0; i < resources.length; i++) { // THIS LINE
URL urlFolder=getClass().getClassLoader().getResource(“平台”);
File[]resources=新文件(urlFolder.getPath()).listFiles();
对于(inti=0;i
这意味着resources
为null
这又意味着listFiles()
返回null
这意味着返回的任何urlFolder.getPath()
都不是文件系统中目录的可解析路径名
那是
public final class Foo
{
public static void main(final String... args)
{
final ClassLoader loader = Foo.class.getClassLoader();
final URL[] urLs = ((URLClassLoader) loader).getURLs();
for (final URL url : urLs) {
System.out.println(url);
System.out.println(Files.probeContentType(Paths.get(url.toURI())));
}
}
}