java - 使用 (getClass().getResourceAsStream ("Path/to/pic")) 与 ("Path/to/pic") 的新图像实例

标签 java imageview treeview javafx-8

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

代替:

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

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

最佳答案

是的。这其实很重要。

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

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

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

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

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

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

关于java - 使用 (getClass().getResourceAsStream ("Path/to/pic")) 与 ("Path/to/pic") 的新图像实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53694687/

相关文章:

java - 无法从 Hashtable 获取值

java - 如何修复 ImageView 引起的 java.lang.OutOfMemoryError 错误?

java - ImageView - 显示新图像并在 1 秒后重置 - onClick

java - jackson XML : how to serialize empty/null collections as empty node

java - apache poi Word 文档(.doc、.docx)更新

java - Jenkins 构建失败,出现 IOException : Failed to parse changelog

java - 以编程方式用作背景时如何更改 ImageButton 可绘制颜色?

Jquery在 TreeView 中查找节点并突出显示

java - 我是 JavaFX 新手。我需要有关如何使 TreeView 节点可拖动和可放置的帮助

c# - 获取TreeView所选节点的位置