繁体   English   中英

ClassLoader.getSystemClassLoader().getResourceAsStream 在克隆项目后返回 null

ClassLoader.getSystemClassLoader().getResourceAsStream returns null after cloning Project

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

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

我正在使用以下行从 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 个回复

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 存储库时都需要重复该步骤。 构建工具会自动执行此步骤,并确保您只需从源代码管理中重新检出,然后调用构建工具,一切都会在完成后顺利进行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM