JavaFX图像未在舞台上显示

2022-03-17 00:00:00 image java fxml javafx-8 javafx-2

我试了好几次,试了几种方法,但是我不能在舞台上如愿地展示我的形象。我认为这可能与java查找资源的路径有关,但我不确定,因为我刚刚开始使用可视化库(在本例中是JavaFX)。以下是我的目录结构:

MyProject
 |_assets
 |  |_img
 |     |_myImage.jpg
 |
 |_some
 |_other
 |_folders
 |
 |_src
    |_ve
       |_org
          |_project
             |_MyProject.java
             |_StratPage.fxml
             |_StartPageController.java

我需要检索myImage.jpg才能呈现,我已经尝试了以下方法:

1)纯fxml方法:

<ImageView
     id="logo" 
     fx:id="logo"
     fitHeight="99.0" 
     fitWidth="99.0" 
     layoutX="14.0" 
     layoutY="18.0" 
     pickOnBounds="true" 
     preserveRatio="true">
         <image>
            <Image url="@../../../../assets/img/myImage.jpg" />
         </image>
</ImageView>
2)同时使用fxml和java。使用fx:id="logo"声明ImageView元素,并注入来自StartPageController.java的图像,如下所示:

public class StartPageController implements Initializable {

    @FXML
    private ImageView logo;


    @Override
    public void initialize(URL url, ResourceBundle rb) {
        this.logo = new ImageView("file:../../../../assets/img/myImage.jpg");
    }    

}

这两种方法都不会产生任何异常,我只是不显示图像。我不知道该怎么办。我将非常感谢您的帮助。

更新:

第一个

我尝试放弃建议的目录结构,并将图像文件放在StartPageController.java的同一文件夹中。通过执行

logo = new ImageView(new Image(getClass().getResourceAsStream("myImage.jpg")))

我没有收到任何异常,但是图像没有呈现,这表明它不是关于查找资源,而是关于呈现图像。会不会是因为没有图书馆?我使用的是Windows8环境,使用的是NetBeans 8.0。再次感谢您的回答。

第二个

我刚刚在NetBeans的项目属性中停用了应用程序的打包和分发。现在图像渲染正确,但我认为问题没有解决,因为当我需要分发软件时,它会重新出现。请帮帮忙!:)


解决方案

我犯了与您相同的错误。因此,为了更正它,将我的图像放在与我的项目的"src"级别相同的Resources文件夹中。这是我的代码,它起作用了。

public void showImage() {
    try {
        Image image = new Image("resources/img/akonolingaMap.jpg");
        imageView.setImage(image);
        imageView.setCache(true);
    } catch (Exception e) {
        printStackTrace();
    }
}

相关文章