Java Can';t使用.getResource().getPath()打开文件

Java Can';t使用.getResource().getPath()打开文件,java,javafx-2,Java,Javafx 2,一年前,我为我的毕业工作编写了JavaFX2.0应用程序。但是一年过去了,我在代码方面遇到了一个问题,这在以前是有效的 所以,在代码中,我想获取文件夹并列出其文件: File dir = new File(getClass().getResource("media/images/backgrounds/").getPath()); File[] files = dir.listFiles(); for (File file : files) { list.add(file.toURI(

一年前,我为我的毕业工作编写了JavaFX2.0应用程序。但是一年过去了,我在代码方面遇到了一个问题,这在以前是有效的

所以,在代码中,我想获取文件夹并列出其文件:

File dir = new File(getClass().getResource("media/images/backgrounds/").getPath()); 
File[] files = dir.listFiles();
for (File file : files) {
    list.add(file.toURI().toString());
}
我在“for(File:files){”行上得到java.lang.NullPointerException

返回 文件:/D:/JavafxApp1/JavafxApp/dist/run20547237221/JavafxApp.jar!/JavafxApp/media/images/backgrounds/


我不想用另一种方法从JAR文件的流中读取文件。这种获取文件的方法在一年前已经100%有效了,但为什么现在不起作用呢?谢谢!

它不会起作用,因为你的文件夹在JAR中。我想一年前它们不是。我认为你不需要为目录所在的情况编写单独的代码在罐子外面:


我发现这显示了如何使用getResourceAsStream列出目录的文件。然后,你可以通过getResourceAsStream访问这些资源。你永远不会知道你是在jar内部还是外部:-)

这不起作用,因为你的文件夹在jar中。我想一年前不是。我想你不需要e目录位于jar外部的情况下的单独代码:


我发现这显示了如何使用getResourceAsStream列出目录中的文件。然后,反过来,您可以通过getResourceAsStream访问这些资源。您将永远不知道自己是在jar内部还是外部:-)不要创建
文件
它无法访问jar内部的资源

getClass().getResource()

已经返回您的
URL
,所以使用该URL或另一个选项是
getResourceAsStream()
不要创建
文件
它无法访问jar中的资源

getClass().getResource()

已返回您的
URL
,因此请使用该URL或另一个选项是
getResourceAsStream()

但您如何解释早期的工作方式??旧版本的JavaFX?但升级版本通常对旧应用程序来说并不那么痛苦……非常奇怪的情况。事实上,我不知道,我只能怀疑您只是通过Eclipse或其他IDE运行了它,以前从未将应用程序放在jar中。@ViralModi谢谢,我找到了一个关于StackOverflow的另一个答案是替换上一个链接。这个链接现在应该可以工作了。但是你如何解释它在早期工作??JavaFX的旧版本?但是升级版本对于旧应用程序来说通常不是那么痛苦…非常奇怪的情况。实际上,我不知道,我只能怀疑你只是通过Eclipse或anot运行它她的IDE,以前从未将您的应用程序放在jar中。@ViralModi谢谢,我在StackOverflow上找到了另一个答案来替换以前的链接。该链接现在应该可以工作了。您可能是在使用NetBeans构建软件。NetBeans 7.2之前的早期版本中的JavaFX项目刚刚用完了编译到文件系统中的类文件。更高版本ons使用JavaFX部署工具编译到jar。因此,您的旧代码是错误的,因为它不应该假设资源是通过文件URL获得的。哇,这就是我搜索的!非常感谢,现在很清楚!)您可能是使用NetBeans来构建软件的。7.2之前的早期NetBeans版本中的JavaFX项目刚刚在f类文件编译到文件系统。更高版本使用JavaFX部署工具编译到jar。因此,您的旧代码是错误的,因为它不应该假设资源是使用文件URL获得的。哇,这就是我搜索的!非常感谢,现在已经清楚了!)