加载图片时为什么要用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
值进行额外处理,包括检查资源的当前 Thread
s contextClassLoader
。
使用类似 Class#getResourceAsString
的优点是您已经为 class 做出了决定,这会(稍微)更快,但也不会那么模糊,并且可能更容易诊断你是否有问题(因为你控制图像本身的源机制)并且没有将决定权交给你不能立即控制的代码(并且由于 validateUrl
是 private static
,不能改变)
假设我正在创建一个 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
值进行额外处理,包括检查资源的当前 Thread
s contextClassLoader
。
使用类似 Class#getResourceAsString
的优点是您已经为 class 做出了决定,这会(稍微)更快,但也不会那么模糊,并且可能更容易诊断你是否有问题(因为你控制图像本身的源机制)并且没有将决定权交给你不能立即控制的代码(并且由于 validateUrl
是 private static
,不能改变)