0

我一直在尝试将图像加载到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");

如果有人知道我在这里做错了什么,我将非常感谢您的帮助!

4

1 回答 1

0

将图像 ( 4fbzW.jpg) 打包到应用程序 jar 文件中(与加载图像的类位于同一位置)并将其作为资源引用:

ivFoto = new ImageView(
  new Image(
    this.getClass().getResource("4fbzW.jpg").toExternalForm()
  )
);

您的问题中的图片参考有一些问题:

  1. file:协议进行硬编码。

    JavaFX 应用程序通常会打包为 jar 文件,因此应使用 jar 协议访问应用程序的资源。通过使用该getResource方法,资源将被用于加载引用资源的类的相同协议获取,因此它将自动使用正确的协议来查找资源,您无需担心这个细节。

  2. 引用开发机器上的本地资源。

    Webstart 和浏览器嵌入式应用程序部署方案主要用于引用通过网络交付给远程客户端的应用程序。客户端计算机的用户可能有任何用户名或正在使用任何支持的操作系统,因此他们不太可能拥有位于以下位置的文件:C:/Users/Carlos/Desktop. 通过将图像与您的应用程序打包并从相对于应用程序代码的位置获取它,那么无论将图像部署在何处,都可以始终一致地找到该图像。

  3. 基于文件的访问违反了 WebStart 和浏览器嵌入式应用程序的安全沙箱

    这种部署模式以受限权限运行应用程序,以防止恶意应用程序做坏事(例如删除所有用户文件或将其发送到外国情报机构)。要允许应用程序在这些部署模式下以提升的安全权限运行,您需要对应用程序进行签名,并且用户需要明确信任您提供的软件。在您的应用程序的特定情况下,我不建议您签名,而是将您需要的资源与应用程序一起打包,这样您和您的用户就无需承受签名应用程序的不便。


另请参阅:javafx.scene.image.Image("flower.png") 在哪里寻找flower.png?

于 2013-04-08T21:48:41.493 回答