首页 > 解决方案 > 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 文件夹中的图像。这两个文件夹位于同一位置。

如果这已经在其他地方得到了回答,我很抱歉,我太健忘而没有看到它,但是任何对这个看似简单的问题的见解将不胜感激。

标签: javafximageview

解决方案


如果您有类似的项目结构:

--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


推荐阅读