【发布时间】:2020-12-18 02:46:29
【问题描述】:
我尝试使用 fxml 在我的 JavaFX 应用程序中显示我的图像没有成功。 我的代码:
...
<ImageView fitHeight="24" fitWidth="24"
pickOnBounds="true" preserveRatio="true">
<Image url="@res/icon.png"/>
</ImageView>
...
没有错误,但我的图像没有显示。我认为图像已加载,但未显示。
这可能吗?我该如何检查?如果是的话,应该不会有错误吧?
事实上,即使我给出了错误的名称,也不会出现运行时错误。所以可能没有加载?
我也尝试过加载不同的图像并更改尺寸,但没有任何效果。
我努力了:
-
"/res/icon.png"-> 运行时错误 #1 -
"res/icon.png"-> Lint 错误 + 运行时错误 #1 -
"/../res/icon.png"-> Lint 错误 + 运行时错误 #1 -
"../res/icon.png"-> Lint 错误 + 运行时错误 #1 -
"@/res/icon.png"-> 运行时错误 #2 -
"@res/icon.png"-> Lint 错误(我正在使用) -
"@/../res/icon.png"-> Lint 错误 + 运行时错误 #2 -
"@../res/icon.png"-> Lint 错误,无显示
运行时错误 #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
(我知道我们不应该在 url 中使用 .. 或 .。我只是在测试)
我见过:
- Why does Image don't load in JavaFX 这正是我的配置。
- How to show image using ImageView 从那里我得到了在 fxml 中链接图像的正确方法。没有错误,但图片未加载/显示。
- ImageView does not work 但我想在 fxml only 中这样做。
- Can't load JavaFX Image 再次仅 fxml。
- Cannot load Image in JavaFX 再次仅 fxml。
- Load Image to ImageView JavaFX 再次仅 fxml。
- JavaFX Image loading error我没有使用 CSS。
- JavaFX image loading in background and threads 不是我感兴趣的。
- How to determine correct path... 非常广泛,但是 fxml 呢?
编辑:我重新创建了原始项目的副本,并尝试按照 cmets 进行故障排除。
结果(响应故障排除部分):
-
正确的映像名称:名称有效,并且映像已正确部署到
out文件夹。但是 IDE 无法识别,导致报错或不显示。 -
正确的路径
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
与第一个示例相同,并且有效!
-
类路径:我还确保我有来自项目根目录的相对地址,
src文件夹(我相信它是类路径根目录。Wrong?)李>
但最后,所有这些仍然无关紧要,因为我使用的是 fxml。上帝!
【问题讨论】:
-
你的 fxml 文件在哪里?
-
@AllanJuan 我的 fxml 文件位于
View文件夹中。好的,我会把它们放在资源中。哇,它成功了! :O 谢谢! -
您有一个解决方案,但我会在这里检查是否正在部署映像文件,请参阅您在 9 中的链接中的“疑难解答”。
-
@James_D 我读过,但我会再读一遍。我对没有错误但没有显示图像的事实感到困惑。当我将名称更改为无效的名称时,再次没有错误。为什么一个路径给出错误,而一个没有,即使没有加载图像?
-
@JaideepShekhar 我无法给出完整的答案,但请注意有些错误是可以立即检测到的,有些则不是。例如。如果 URL 无效(格式错误),
FXMLLoader无法创建URL对象,并且可能引发异常。 OTOH 在某些情况下肯定无法做到这一点 - 假设您使用的是不存在的http:url,并在后台加载图像。错误不会立即发生,所以不会抛出异常——图像的error标志将被设置为true。您的案例不太清楚,但并不总是针对错误的 url 抛出异常。