为什么在加载图片时使用getResourceAsStream?

时间:2015-03-17 00:48:41

标签: java image jar javafx assets

让我们说我正在创建一个jar文件,并在资产文件夹中有一个图标,以便包含在jar中。

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

是否有任何特别的优势或劣势
Image icon = new Image("Assets/Icon.png");

Vs以上。

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

两者似乎工作得很好,所以我想确定一般应该倾向于哪些以及为什么。

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

1 个答案:

答案 0 :(得分:3)

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

使用类似Class#getResourceAsString之类的东西的好处是你已经为这个类做出了决定,这个决定会(稍微)更快,但也会更不明确,如果你有问题可能更容易诊断(当您控制图像本身的源机制时,并且不会将决策权交给您不能立即控制的代码(因为validateUrlprivate static,所以不能更改)< / p>