JAVA FX ImageView仅在启动时加载某些图像

时间:2018-09-29 23:11:42

标签: javafx imageview

我目前正在开发一个有趣的扑克应用程序,尝试使用imageviews时遇到了另一个问题。

现在我的图像结构如下: JavaFXApplication1 \ src \ images

“ images”文件夹包含另外两个文件夹,一个是“ cards”,另一个是“ playerImages”。 这也是它的屏幕截图:project structure

当前,我正在场景构建器中使用文档相对路径来初始为每个纸牌和玩家加载图像。对于每张卡,图像路径最初是在Scenebuilder中设置的“ @ .. \ images \ cards \ back.png”。启动应用程序时,此方法可以很好地工作。但是,对于卡旁边的玩家图像,例如,我有“ @ .. \ images \ playerImages \ player1.png”,由于某些原因,此操作无效。

在scenebuilder中,“ player1.png”图像显示在应该显示的位置,但是当我启动所有内容时消失。

我通读了Images not showing on launch by the main, but showed on Scene builder,但我不确定该解决方案对我来说是否相同,因为我的图像位于源文件夹中。

我尝试使用fx:id并在控制器类中手动设置图像,但是收到一条错误消息,指出我的输入流为空。

我还尝试仅将“ player1.png”添加到我的根图像文件夹并使用该路径,但这仍然没有效果。但是,当我将player1图像路径更改为cards文件夹中的任何内容时,它都可以工作。我不明白为什么它适用于cards文件夹中的图像,而不适用于playerImages文件夹中的图像。这些文件夹都在同一位置。

如果在其他地方已经回答了这个问题,我深表歉意,但我完全不愿看到它,但是对这个看似简单的问题的任何见解将不胜感激。

1 个答案:

答案 0 :(得分:0)

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

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

当然在目录“资源:shuild被标记为资源根目录