我一直未能成功尝试使用 fxml 在 JavaFX 应用程序中显示图像。\n我的代码:
\n...\n<ImageView fitHeight="24" fitWidth="24"\n pickOnBounds="true" preserveRatio="true">\n <Image url="@res/icon.png"/>\n</ImageView>\n...\nRun Code Online (Sandbox Code Playgroud)\n\n没有错误,但我的图像没有显示。我认为图像已加载,但未显示。
\n这可能吗?我该如何检查?如果是的话,不应该有错误吗?
事实上,即使我给出了错误的名称,也不会出现运行时错误。那么可能没有加载?
\n我也尝试过加载不同的图像并更改尺寸,但没有任何效果。
\n"/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
(我知道我们不应该在网址中使用 .. 或 .。我只是在测试)
\n编辑:我重新创建了原始项目的副本,并尝试按照注释进行故障排除。
\n结果(对故障排除部分的响应):
\n正确的映像名称:名称有效,并且映像已正确部署到out文件夹。但IDE无法识别,导致错误或不显示。
正确的路径
\na)绝对 URL
\n有趣的是,getClass().getResource("/res/icon.png").getExternalForm()方法给出:
file:/C:/Users/Chander%20Shekhar/IdeaProjects/TestRes/out/production/TestRes/res/icon.png\nRun Code Online (Sandbox Code Playgroud)\n并有效。不确定是否file:应该在那里。这getPath()方法给出:
/C:/Users/Chander%20Shekhar/IdeaProjects/TestRes/out/production/TestRes/res/icon.png\nRun Code Online (Sandbox Code Playgroud)\n并且不起作用(运行时错误#1)。删除第一个/会出现另一个错误:
Caused by: java.lang.IllegalArgumentException: Invalid URL: unknown protocol: c\nRun Code Online (Sandbox Code Playgroud)\n\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0\xc2\xa0b)相对 URL
\n所以我实际上在我的res文件夹中创建了一个标记类,并使用ImageMarker.class.getResource("icon.png").toExternalForm()它给出了
file:/C:/Users/Chander%20Shekhar/IdeaProjects/TestRes/out/production/TestRes/res/icon.png\nRun Code Online (Sandbox Code Playgroud)\n与第一个示例相同,并且有效!
\nsrc文件夹(我相信是类路径根目录)。错误?)但这一切最终还是无关紧要,因为我使用的是 fxml。上帝!
\n我建议您使用资源文件夹,并将 FXML 和图像都放入该文件夹中。所以你会有这样的文件结构:
src/
|-- main/
| -- java/
| -- resources/
| -- fxml/screen.fxml
| -- img/image.png
Run Code Online (Sandbox Code Playgroud)
然后screen.fxml你会做类似的事情
src/
|-- main/
| -- java/
| -- resources/
| -- fxml/screen.fxml
| -- img/image.png
Run Code Online (Sandbox Code Playgroud)
这就是我组织项目的方式,而且效果很好。CSS 文件也将存在于资源中,希望有所帮助。
PS:你有一个res/文件夹,但Java不会将其识别为资源文件夹,除非你确认它。如果您使用的是 IntelliJ,则可以右键单击它,然后选择“标记为资源根”。如果您使用 Maven,则可以通过多种方式将其声明为资源文件夹。无论如何,如果您只是将其重命名,resources/它将自动被视为您的资源文件夹。
| 归档时间: |
|
| 查看次数: |
2642 次 |
| 最近记录: |