使用fxml在JavaFX中显示图像

我一直未尝试使用fxml在JavaFX应用程序中显示图像。 我的代码:

...
<ImageView fitHeight="24" fitWidth="24"
    pickOnBounds="true" preserveRatio="true">
        <Image url="@res/icon.png"/>
</ImageView>
...

我的项目目录结构:

使用fxml在JavaFX中显示图像

没有错误,但是我的图像没有显示。我认为图片已加载,但未显示。
这可能吗?我该如何检查?如果是这样,应该不会有错误吗?

事实上,即使我输入了错误的名称,也不会出现运行时错误。也许未加载?

我也尝试加载不同的图像并更改尺寸,没有任何效果。


我试过了:
  1. "/res/icon.png"->运行时错误#1
  2. "res/icon.png"-> Lint错误+运行时错误#1
  3. "/../res/icon.png"-> Lint错误+运行时错误#1
  4. "../res/icon.png"-> Lint错误+运行时错误#1
  5. "@/res/icon.png"->运行时错误#2
  6. "@res/icon.png"->棉绒错误(我在使用什么)
  7. "@/../res/icon.png"-> Lint错误+运行时错误2 #li
  8. "@../res/icon.png"->棉绒错误,无显示

运行时错误#1:Caused by: java.lang.IllegalArgumentException: Invalid URL: Invalid URL or resource not found

运行时错误2:Caused by: javafx.fxml.LoadException: Invalid resource: /res/icon.png not found on the classpath

(我知道我们不应在网址中使用..或.。我只是在测试)


我见过:
  1. Why does Image don't load in JavaFX正是我的配置。
  2. How to show image using ImageView,从中可以正确地链接fxml中的图像。没有错误,但图像未加载/显示。
  3. ImageView does not work,但我只想在fxml 中这样做。
  4. Can't load JavaFX Image再次仅是fxml。
  5. Cannot load Image in JavaFX再次仅是fxml。
  6. Load Image to ImageView JavaFX再次仅是fxml。
  7. JavaFX Image loading error我没有使用CSS。
  8. JavaFX image loading in background and threads不是我感兴趣的内容。
  9. How to determine correct path...非常广泛,但是fxml呢?

编辑:我重新创建了原始项目的副本,并按照注释尝试了故障排除。

结果(响应故障排除部分):

  1. 正确的映像名称 :名称有效,并且映像已正确部署到out文件夹中。但是它无法被IDE识别,并导致错误或无显示。

  2. 正确的路径

    a)绝对网址

有趣的是,getclass().getResource("/res/icon.png").getExternalForm()方法给出:

 file:/C:/Users/Chander%20Shekhar/IdeaProjects/TestRes/out/production/TestRes/res/icon.png

并起作用。不知道file:是否应该在那里。 getPath()方法提供:

/C:/Users/Chander%20Shekhar/IdeaProjects/TestRes/out/production/TestRes/res/icon.png

并且不起作用(运行时错误#1)。删除第一个/会导致另一个错误:

Caused by: java.lang.IllegalArgumentException: Invalid URL: unknown protocol: c

b)相对网址

所以我实际上在我的res文件夹中做了一个标记类,并使用了ImageMarker.class.getResource("icon.png").toExternalForm()

file:/C:/Users/Chander%20Shekhar/IdeaProjects/TestRes/out/production/TestRes/res/icon.png

与第一个示例相同,并且有效!

  1. Classpath :我还确保我有来自项目根目录src的相对地址(我相信这是类路径根目录。{{ 3}}?)

但是最后,所有这些都是无关紧要的,因为我使用的是fxml。上帝!

iCMS 回答:使用fxml在JavaFX中显示图像

我建议您使用资源文件夹,并将FXML和图像都放在该文件夹中。因此,您将拥有以下文件结构:

src/
|-- main/
    | -- java/
    | -- resources/
         | -- fxml/screen.fxml
         | -- img/image.png

然后在screen.fxml上执行类似的操作

<ImageView pickOnBounds="true" preserveRatio="true">
    <image>
        <Image url="@../img/image.png" />
    </image>
</ImageView>

这就是我组织项目的方式,并且效果很好。 CSS文件也将存在于资源中,希望有帮助。

PS:您有一个res/文件夹,但是Java除非您承认它,否则不会将其识别为资源文件夹。如果您使用的是IntelliJ,则可以右键单击它,然后选择“标记为资源根目录”。如果您使用maven,则有多种方法可以将其声明为资源文件夹。无论如何,如果您仅将其重命名为resources/,它将被自动视为您的资源文件夹。

本文链接:https://www.f2er.com/1659007.html

大家都在问