Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么可能阻止可运行的JAR打开?_Java_Image_File_Jar_Resources - Fatal编程技术网

Java 什么可能阻止可运行的JAR打开?

Java 什么可能阻止可运行的JAR打开?,java,image,file,jar,resources,Java,Image,File,Jar,Resources,我正试图将我的java项目(这是一个游戏)导出到一个可运行的JAR文件中,但不幸的是,尽管我这样做了:文件>导出>java>可运行的JAR文件>正确选择了我的主类,但当我尝试打开它时,它什么都不做(在windows上),或者在菜单栏中打开,然后意外关闭(在mac上) 我怀疑这是因为我加载资源的方式。有谁能告诉我这可能是什么原因吗 编辑:这就是问题所在,我在resources.lenght的第一个for循环中得到了一个NullPointerException:这个方法扫描我的资源中的一个文件夹,从

我正试图将我的java项目(这是一个游戏)导出到一个可运行的JAR文件中,但不幸的是,尽管我这样做了:文件>导出>java>可运行的JAR文件>正确选择了我的主类,但当我尝试打开它时,它什么都不做(在windows上),或者在菜单栏中打开,然后意外关闭(在mac上)

我怀疑这是因为我加载资源的方式。有谁能告诉我这可能是什么原因吗

编辑:这就是问题所在,我在resources.lenght的第一个for循环中得到了一个NullPointerException:这个方法扫描我的资源中的一个文件夹,从我的资源中读取符合平台类型(游戏是platformer)的每个图像,并将它们保存在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");
            }   
        }
    }
}
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())));
        }
    }
}