【问题标题】:new Image instance using (getClass().getResourceAsStream("Path/to/pic")) vs ("Path/to/pic")使用 (getClass().getResourceAsStream("Path/to/pic")) 与 ("Path/to/pic") 的新图像实例
【发布时间】:2018-12-09 17:10:30
【问题描述】:

当我在学习 javafx 的教程并尝试为 ImageView 创建一个新的 Image 实例以将其用于 TreeView 时,我注意到导师用于创建 ImageView: new ImageView(new Image(getClass().getResourceAsStream("/Path/to/pic"))

代替:

new ImageView(new Image("/Path/to/pic"))

我都试过了,两者都很好用,我想知道使用getClass().getResourceAsStream() 滚动是否有任何效果或意义。

【问题讨论】:

  • getResource 方法适用于将应用程序部署为 Jar 文件时。 getResource 在 Jar 文件中搜索。而 path 方法需要知道 Jar 文件在磁​​盘上的位置,这可能很难管理。

标签: java imageview treeview javafx-8


【解决方案1】:

是的。这其实很重要。

图像是一种资源。资源是程序使用的一些不变的信息,例如图像、声音、默认属性、模板、初始数据等。

在使用 IDE 进行开发时,资源通常以文件的形式存储在工作区的文件夹中。因此,只要您使用 IDE 而不是打包程序,您就可以将资源视为文件。

但是当你想要部署你的程序时(打包它并安装到其他地方,比如服务器,或者其他人的计算机),它通常被打包成一个或多个 JAR 文件。 JAR 文件包括已编译的类和资源。

当它们在 JAR 文件中时,资源不再是文件。它们只是 zip 条目(zip 条目不是文件 - 它们是 zip 文件的一部分,可以使用适当的软件访问)。

如果您使用文件操作来访问资源,则会遇到问题,例如this one。图像不会显示 - 因为文件不存在。该资源不是文件,它不作为磁盘上的文件存在。它只是 JAR 文件中的一组字节。

为了能够访问资源,您可以使用类对象和getResourceAsStream(),如图所示。这“神奇地”知道(当正确设置类加载器和类路径时)当您在 IDE 中运行时,资源存储在工作区的文件中,而当您从 JAR 运行时,资源存储在罐。它将从存储它们的位置获取这些字节,您将能够创建图像。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-01
    • 1970-01-01
    • 2021-03-06
    • 2022-12-28
    • 1970-01-01
    • 1970-01-01
    • 2016-12-16
    相关资源
    最近更新 更多