javafx - JAVA FX ImageView 仅在启动时加载某些图像
问题描述
我目前正在开发一个有趣的扑克应用程序,并且在尝试使用 imageviews 时遇到了另一个问题。
现在我的图像结构如下: JavaFXApplication1\src\images
该“images”文件夹包含另外两个文件夹,一个是“cards”,另一个是“playerImages”。这里也是它的截图:项目结构
目前,我正在使用场景构建器中的文档相对路径来初始加载每个卡片和玩家的图像。对于每张卡片,图像路径最初是在 scenebuilder 中设置的“@..\images\cards\back.png”。此方法在启动应用程序时效果很好。但是,对于卡片旁边的玩家图像,例如,我有“@..\images\playerImages\player1.png”,但由于某种原因这不起作用。
在场景构建器中,“player1.png”图像显示在它应该出现的位置,但当我启动所有内容时消失。
我通读了主启动时未显示的图像,但在场景构建器上显示但我不确定解决方案对我来说是否相同,因为我的图像在我的源文件夹中。
我尝试使用 fx:id 并在我的控制器类中手动设置图像,但收到一条错误消息,指出我的输入流为空。
我还尝试将“player1.png”添加到我的根图像文件夹并使用该路径,但这仍然不起作用。然而,当我将 player1 图像路径更改为卡片文件夹中的任何内容时,它可以工作。我不明白为什么它适用于卡片文件夹中的图像,但不适用于 playerImages 文件夹中的图像。这两个文件夹位于同一位置。
如果这已经在其他地方得到了回答,我很抱歉,我太健忘而没有看到它,但是任何对这个看似简单的问题的见解将不胜感激。
解决方案
如果您有类似的项目结构:
--main
--java
--src
--resources
--images
--cards
back.png
--players
player1.png
您可以从您的 java 代码中的资源中设置图像。但是你需要使用getResources()
例如:
@FXML
private ImageView imageView;
Image image = new Image(getClass().getResourceAsStream("/images/players/player1.png"));
imageView = new ImageView(image);
当然目录”resources: 应该被标记为resources root
推荐阅读
- asp.net-identity - 重新启动身份服务器时再次请求声明
- r - dplyr 0.7.5 select() 行为的变化
- php - 使用带有多维数组的 PHP 将 MySQL 结果转换为 XML 格式
- bash - 在 bash 脚本上正确格式化 crontab 可执行文件
- c# - 如何将此 SQL 转换为 ASP.NET MVC 的 LINQ?
- python - 运行时错误无法启动新线程
- android - 一个应用程序是否有可能使用与另一个应用程序一起提供的 *.so 模块?
- git - 如何从 git 存储库中删除文件,但只能删除到历史上的某个点?
- node.js - 在 Visual Studio 2015 中设置 Typescript
- javascript - 如何将此字符串拆分为块