在我学习javafx教程并尝试为ImageView创建一个新的图像实例并将其用于TreeView时,我注意到导师用于创建ImageView:new ImageView(new Image(getClass().getResourceAsStream("/Path/to/pic"))
而不是:
new ImageView(new Image("/Path/to/pic"))
我尝试了这两种方法,两者都很好,我想知道这个使用getClass().getResourceAsStream()的滚动是否有任何效果或意义。
发布于 2018-12-10 16:17:37
是。这其实是很重要的。
图像是一种资源。资源是程序使用的一些不变的信息,如图像、声音、默认属性、模板、初始数据等。
在使用IDE进行开发时,资源通常以文件形式存储在工作区中的文件夹中。因此,只要使用IDE而不是打包程序,就可以将资源作为文件处理。
但是,当您想要部署您的程序(将其打包并安装到其他地方,如服务器或其他计算机)时,通常会将其打包到一个或多个JAR文件中。JAR文件包括已编译的类和资源。
当它们在JAR文件中时,资源不再是文件。它们只是zip条目(zip条目不是文件--它们是zip文件的一部分,可以通过适当的软件访问)。
如果使用文件操作访问资源,就会遇到一个问题,比如this one。图像将不会显示-因为文件不在那里。资源不是文件,它不作为磁盘上的文件存在。它只是JAR文件中的一组字节。
为了能够访问资源,如图所示,您可以使用类对象和getResourceAsStream()。这个“魔术”知道(当正确设置了类加载器和类路径时),当您在IDE中运行时,资源存储在工作区中的文件中,当您从JAR运行时,资源存储在JAR中。它将从存储它们的位置获取这些字节,您将能够创建您的映像。
https://stackoverflow.com/questions/53694687
复制相似问题