【问题标题】:ImageView in javaFx is not shown when i run it as webstart or in browser当我将它作为 webstart 或在浏览器中运行时,javaFx 中的 ImageView 不显示
【发布时间】:2013-03-31 02:59:57
【问题描述】:

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

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

【问题讨论】:

    标签: imageview javafx


    【解决方案1】:

    将您的图像 (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 和浏览器嵌入式应用程序的安全沙箱

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


    另见:Where does javafx.scene.image.Image("flower.png") look for flower.png?

    【讨论】:

      猜你喜欢
      • 2019-01-05
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      • 2017-12-29
      • 2015-05-10
      • 1970-01-01
      • 2017-04-08
      相关资源
      最近更新 更多