我一直在尝试将图片加载到ImageView
中,当我将其作为独立应用程序运行时,它可以正常运行,但是当我尝试在浏览器中运行它或作为webstart运行时它不会得到显示。
我试过了:
ivFoto = new ImageView(new Image("file:/C:/Users/Carlos/Desktop/4fbzW.jpg"));
或
ivFoto = new ImageView(new Image("file:\\C:\\Users\\Carlos\\Desktop\\4fbzW.jpg"));
或
ivFoto = new ImageView("file:///C:/Users/Carlos/Desktop/4fbzW.jpg");
如果有人知道我在这里做错了什么,我真的很感激你的帮助!
答案 0 :(得分:0)
将图像(4fbzW.jpg
)打包到应用程序jar文件中(与加载图像的类相同的位置)并将其作为资源引用:
ivFoto = new ImageView(
new Image(
this.getClass().getResource("4fbzW.jpg").toExternalForm()
)
);
您的问题中的图片引用存在一些问题:
对file:
协议进行硬编码。
JavaFX应用程序通常打包为jar文件,因此应使用jar协议访问应用程序的资源。通过使用getResource
方法,资源将被用于加载引用资源的类的相同协议提取,因此它将自动使用正确的协议来查找资源,您无需担心这个问题。细节。
参考开发计算机上的本地资源。
Webstart和浏览器嵌入式应用程序部署方案主要用于引用通过网络传送到远程客户端的应用程序。客户端计算机的用户可以拥有任何用户名或使用任何支持的操作系统,因此他们不太可能在C:/Users/Carlos/Desktop
位置找到文件。通过将图像与您的应用程序打包并从相对于应用程序代码的位置获取图像,无论在何处部署图像,都可以始终如一地找到图像。
基于文件的访问违反了WebStart和浏览器嵌入式应用的安全沙箱
这种部署模式运行具有受限权限的应用程序,以防止恶意应用程序执行错误操作(例如删除所有用户文件或将其发送到外部情报服务)。要允许应用程序在这些部署模式下以提升的安全权限运行,您需要sign the applications并且用户需要明确信任您提供的软件。在您的应用的特定情况下,我不建议签名,而是将您需要的资源打包到应用中,这样您和您的用户就不需要承担已签名应用的不便。
另请参阅:Where does javafx.scene.image.Image("flower.png") look for flower.png?