JavaFX:FXML 打开图像格式错误的 URL 异常协议:e

Posted

技术标签:

【中文标题】JavaFX:FXML 打开图像格式错误的 URL 异常协议:e【英文标题】:JavaFX: FXML opening image malformed URL exception protocol: e 【发布时间】:2020-12-15 05:09:40 【问题描述】:

我正在尝试学习 JavaFX 并制作一个可以从用户 tableview 显示用户图像的用户列表。这是我的代码:

@FXML private ImageView image;
@FXML
     public void buttonSHow(ActionEvent actionEvent) throws MalformedURLException, FileNotFoundException 
      

        CList  =TAbleview.getSelectionModel().getSelectedItems();
        System.out.println(CList.get(0).getPicture());
        //URL url = new URL(CList.get(0).getPicture());
        //FileInputStream input = new FileInputStream (CList.get(0).getPicture());
        image.setImage(new Image(CList.get(0).getPicture()));
        
    

我正在尝试使用此代码执行的操作是使用存储在用户列表中的绝对路径设置带有ImageImageView 图像。 fxml 有这个:

<ImageView fx:id = "image"/>

当我尝试运行它时,它给了我MalformedURLException: unknown protocol e 的错误。我试图手动将 url 打入 fxml 以查看它是否手动加载,

<ImageView>
<image>
<Image url = "@E:\test.jpg"/>
</image>
</ImageView>

但它仍然给我同样的错误。

【问题讨论】:

E:\test.jpg 不是有效的相对(或绝对)URL。如果您想硬编码一个绝对文件 URL 以进行测试,请使用(我认为)url = “file://E:/test.jpg” 请使用java命名约定 @James_D 谢谢你,我已经尝试过你的建议,它没有给我错误,但是加载时间需要更长的时间,并且图像仍然没有显示 @kleopatra 你好,我正在自学,对去哪里知之甚少,我还不知道 java 命名约定,现在我会研究一下。感谢您的评论。 对不起;很久没有使用Windows了(“升级”到Vista后大约10分钟,我买了一台Mac ...)。在file: 之后需要三个/(两个将协议file: 与主机名分隔,可以为空,一个将(空)主机名与文件路径分隔开)。 IE。 url = "file:///E:/test.jpg"。见en.wikipedia.org/wiki/File_URI_scheme。当然,就像在生产环境中那样,将图像包含在应用程序中几乎更容易。见***.com/questions/61531317/… 【参考方案1】:

如果您打算根据文件系统中的文件(例如用户选择的文件)设置图像,则需要创建一个表示该文件的 URL。

您不应该尝试自己构建它,而应该使用File.toURI() 方法,该方法处理创建协议并正确解析不是有效URL 的文件路径(例如,包含非法URL 字符的文件名,例如空格)。

所以你应该这样做

File file = new File(CList.get(0).getPicture());
image.setImage(new Image(file.toURI().toString()));

【讨论】:

以上是关于JavaFX:FXML 打开图像格式错误的 URL 异常协议:e的主要内容,如果未能解决你的问题,请参考以下文章

如何确定我的 JavaFX 应用程序所需的 FXML 文件、CSS 文件、图像和其他资源的正确路径?

如何确定我的 JavaFX 应用程序所需的 FXML 文件、CSS 文件、图像和其他资源的正确路径?

JavaFX FileChooser 引发错误(可能很容易修复,但仍然很困惑)

groovy - javafx - 使用 WebLogic InitialContext 后无法从 FXML 打开新窗口

javafx fxml ComboBox错误

javafx动态地在新选项卡中打开一个新的fxml文件