JavaFX Image未在舞台上显示

时间:2014-06-17 09:20:10

标签: java image javafx-2 javafx-8 fxml

我已经尝试了几次和几种方法,但我无法按照自己的意愿在舞台上展示我的图像。我认为它可能与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。使用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");
    }    

}

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

更新

第一

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

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

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

第二

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

5 个答案:

答案 0 :(得分:3)

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

 this.logo = new ImageView(new Image(getClass().getResourceAsStream("/assets/img/myImage.jpg")));

答案 1 :(得分:1)

我和你有同样的错误。所以要纠正它将我的图像放在资源文件夹中与我项目的“src”相同的级别。这是我的代码,它的工作原理。

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

答案 2 :(得分:0)

在java应用程序中,文件系统文件资源之间存在区别(在类路径上,在.jar中)。

如果图像是应用程序的一部分,并且已修复,只读,就像您的相对路径所示,请使用资源。

然而,图像必须在罐子里面。

也许:

/src/assets/img/myImage.jpg

或make / assets也是一个顶级源目录。

然后/img/myImage.jpg(或在第一种情况下/assets/img/myImage.jpg

以编程方式,我们不使用文件,而是使用网址getClass().getResource("/img/myImage.jpg")getResourceAsStream

答案 3 :(得分:0)

如果您使用Intellij作为主编辑器,则可以将文件夹标记为“资源”,或者只需打开“项目结构”->“模块”->,然后将图像文件夹标记为“资源”

希望对您有帮助。

答案 4 :(得分:0)

可以通过将图标/图片所在的文件夹名称更改为“资源”来解决此问题。它必须在您当前的src文件夹中,这对我来说很好(我遇到了同样的问题)。