JavaFX 图像未在舞台上显示

Thr*_*oze 5 java image javafx-2 fxml javafx-8

我已经尝试了很多次和几种方法,但我无法在舞台上随心所欲地展示自己的形象。我认为这可能与 java 查找资源的路径有关,但我不确定,因为我刚刚开始使用可视化库(在这种情况下为 JavaFX)。这是我的目录结构:

MyProject
 |_assets
 |  |_img
 |     |_myImage.jpg
 |
 |_some
 |_other
 |_folders
 |
 |_src
    |_ve
       |_org
          |_project
             |_MyProject.java
             |_StratPage.fxml
             |_StartPageController.java
Run Code Online (Sandbox Code Playgroud)

我需要检索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>
Run Code Online (Sandbox Code Playgroud)

2) 同时使用 fxml 和 java。用 声明ImageView元素fx:id="logo",并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");
    }    

}
Run Code Online (Sandbox Code Playgroud)

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

更新:

第一的

我尝试放弃建议的目录结构,并将图像文件放在StartPageController.java. 通过做

logo = new ImageView(new Image(getClass().getResourceAsStream("myImage.jpg")))
Run Code Online (Sandbox Code Playgroud)

我没有得到任何异常,但图像没有渲染,这表明我不是在寻找资源,而是渲染图像。可能是缺少任何图书馆吗?我在 Windows 8 环境中,使用 Netbeans 8.0。再次感谢您的回答。

第二

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

Per*_*eel 5

我检查了自己项目中的代码,它适用于下面的代码片段。我已将其调整为您的示例

 this.logo = new ImageView(new Image(getClass().getResourceAsStream("/assets/img/myImage.jpg")));
Run Code Online (Sandbox Code Playgroud)


Ana*_*ABE 4

我和你有同样的错误。因此,为了纠正它,将我的图像放置在项目“src”同一级别的资源文件夹中。这是我的代码,它有效。

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