我一直在应用其他类似问题的解决方案。

我正在使用以下行从 res 文件夹中获取图像:

shell.setImage(new Image(display, ClassLoader.getSystemClassLoader().getResourceAsStream("icon_128.png")));

该文件位于项目的“res”文件夹内。

在我将项目上传到 Bitbucket 中的 Git 存储库之前,它运行良好。 克隆项目并导入后,现在我的项目崩溃了,因为getResourceAsStream("icon_128.png")返回 null。

这令人沮丧,因为它在另一个未版本化到 G|it 的项目中完美运行,但仅在我使用 Git 克隆的新目录项目中崩溃。

在项目的两个版本中,该文件都位于“res”文件夹中。

这会发生什么?

#1楼 票数:0

git 与它无关。 你没有提供足够的细节来确定发生了什么,但我想到了两个明显的问题:

[1] getResourceAsStream在 java 查找类文件的同一个地方查找命名文件:类路径。 您正在从编辑器或在命令行上使用java运行此代码(在这种情况下,您正在运行一个 jar 文件,并且构建工具向该 jar 添加了一个类路径条目,如果您使用-jar开关,或者你不是,在这种情况下你在命令行上指定类路径),或者使用构建工具(在这种情况下它将提供类路径): icon_128.png 需要在一个的根目录中类路径上的条目,现在不是。 解决方法是,好吧,解决这个问题。 例如,Maven 将在 /src/main/resources 中找到的所有资源复制到它制作的任何 jar 中。 您的 icon_128.png 应该在那里。

[2] 这不是正确的做法。 正确的方法是ClassThisCodeIsIn.class.getResourceAsStream("/icon_128.png") (注意:起始斜线;很重要)。 你的版本有各种有点奇特的失败案例,这个版本跳过了。 此版本将专门查看生成类文件的类路径,不能 NPE; 在各种情况下,您的版本将失败或抛出 NullPointerExceptions。

注意:当您克隆和重新构建时,“构建”目录被有效地擦除,因为您没有将它们签入源代码管理。 这就是为什么它以前有效而现在无效的原因。 git 不是罪魁祸首; 您或您的 IDE 将 icon_128.png 复制到构建目录,并且每次克隆 git 存储库时都需要重复该步骤。 构建工具会自动执行此步骤,并确保您只需从源代码管理中重新检出,然后调用构建工具,一切都会在完成后顺利进行。

  ask by NullPointerException translate from so

未解决问题?本站智能推荐:

3回复

ClassLoadergetResourceAsStream返回null

我的项目目录结构(在 Eclipse 中): 在Driver ,我有以下代码: 当我运行它时,我得到以下控制台输出: 为什么? 我是否将myconfig.txt放在了错误的位置? 我是否错误地使用了 ClassLoader API? 还有什么? 提前致谢!
1回复

在非Maven项目中,如何在运行时查看java类路径上的类?[重复]

这个问题已经在这里有了答案: 仅列出当前项目中Java类路径上的项目 1个答案 我有两个在Eclipse中声明相同依赖项的项目。 一组单元测试有效,而另一组无效。 我遇到错误, No tests matching [*methodname*] 。 一些谷歌搜索建议图书馆问
2回复

使用ClassLoader的绝对路径getResourceAsStream()

我正在尝试使用ClassLoader getResourceAsStream() 我的Direcory结构如下: 对于classloader.getResourceAsStream("MYLOC/someprops.properties")工作正常。 但现在我必须将属性文件移到.wa
1回复

将相对目录添加到java类路径并使用ClassLoader()。getResourceAsStream(“”)

是否可以在Java类路径中添加相对目录(即foo / bar / plugh)并使用 要获取foo / bar / plugh / xyzzy.properties? 我的类路径如下所示: 而且我能够使用来自foo和xyz jars的类和资源,但不能使用来自plugh目录的类和资源。
1回复

ClassLoader.getSystemResource()会去哪里?

现有的代码可以调用 据我了解,这会在类路径中搜索所请求的文件。 我使用下面的代码打印出了类路径: https : //www.mkyong.com/java/how-to-print-out-the-current-project-classpath/并获得了以下内容: 但是,实际位于
1回复

Maven如何使用ClassLoader加载类

目前我对 Java 中的 ClassLoader 的了解有点模糊。 那是因为到目前为止我还没有找到任何适合 CLassLoader 初学者的好的文档。 而我正在寻找的正是与 Maven 相关的。 声明免责声明,让我进入我的问题。 我正在编写一个 Spring MVC 应用程序,我决定研究如何使用 C
2回复

getClass()。getClassLoader()。getResourceAsStream引发NullPointerException

在Java中,getClass()。getClassLoader()如何返回null? “类”所在的jar不在common / lib下。 罐子没有被加载。 jar中所有类的ClassLoader为null。
2回复

getClass()。getResource(“/”)在命令行中返回null

我正在尝试在/src/main/resources/file.txt中读取我的maven项目中的文件。 我正在使用 当通过eclipse运行时,url对象获取正确的值。 但是,当我打包jar并在命令行中运行它时: 它为'url'对象返回null并在下一行中抛出NullPointe