加载图片时为什么要用getResourceAsStream?

Why use getResourceAsStream when loading images?

假设我正在创建一个 jar 文件,并且在资产文件夹中有一个图标要包含在 jar 中。

所以在使用之前,stage.getIcons().add(icon); 在我的代码中将图标设置为

有什么特别的优点或缺点吗
Image icon = new Image("Assets/Icon.png");

Image icon = new Image(getClass().getResourceAsStream("Assets/Icon.png"));

两者似乎都很好用,所以我想确定我通常应该倾向于哪个以及为什么。

有一个相关主题here,但它主要将加载样式与 Web 应用程序进行比较。

javafx.scene.Image(String) 调用 validateUrl,后者对 String 值进行额外处理,包括检查资源的当前 Threads contextClassLoader

使用类似 Class#getResourceAsString 的优点是您已经为 class 做出了决定,这会(稍微)更快,但也不会那么模糊,并且可能更容易诊断你是否有问题(因为你控制图像本身的源机制)并且没有将决定权交给你不能立即控制的代码(并且由于 validateUrlprivate static,不能改变)