JavaFX图像未在后台显示
我已经尝试了好几次,好几种方法,但我不能在舞台上展示我想要的形象。我认为这可能与java查找资源的路径有关,但我不确定,因为我刚刚开始使用可视化库(本例中为JavaFX)。以下是我的目录结构:JavaFX图像未在后台显示,java,image,javafx-2,javafx-8,fxml,Java,Image,Javafx 2,Javafx 8,Fxml,我已经尝试了好几次,好几种方法,但我不能在舞台上展示我想要的形象。我认为这可能与java查找资源的路径有关,但我不确定,因为我刚刚开始使用可视化库(本例中为JavaFX)。以下是我的目录结构: MyProject |_assets | |_img | |_myImage.jpg | |_some |_other |_folders | |_src |_ve |_org |_project |_MyPr
MyProject
|_assets
| |_img
| |_myImage.jpg
|
|_some
|_other
|_folders
|
|_src
|_ve
|_org
|_project
|_MyProject.java
|_StratPage.fxml
|_StartPageController.java
我需要检索要渲染的myImage.jpg
,我尝试了以下方法:
1) 纯fxml方法:
这两种方式都不会产生任何异常,我只是不显示图像。我不知道该怎么办。我非常感谢你的帮助
更新:
弗斯特
我尝试放弃使用建议的目录结构,并将图像文件放在StartPageController.java
的同一文件夹中。通过做
logo = new ImageView(new Image(getClass().getResourceAsStream("myImage.jpg")))
我没有得到任何例外,但图像没有渲染,这表明我不是在寻找资源,而是在渲染图像。可能是因为缺少图书馆吗?我在Windows 8环境中,使用Netbeans 8.0。再次感谢你的回答
第二
我刚刚在Netbeans的项目属性中停用了打包和分发应用程序。现在图像渲染正确,但我不认为这个问题得到解决,因为当我需要分发软件时,它会重新出现。求求你,还需要帮助!:) 在java应用程序中,文件系统文件和资源之间存在区别(在类路径上,在.jar内部) 如果图像是应用程序的一部分,并且是固定的、只读的,如相对路径所示,请使用资源 但是,图像必须在jar中 也许:
/src/assets/img/myImage.jpg
或者使/assets也成为顶级源目录
然后/img/myImage.jpg
(或者在第一种情况下/assets/img/myImage.jpg
)
从编程角度讲,我们不使用文件,而是使用URL
getClass().getResource(“/img/myImage.jpg”)
或getResourceAsStream
我在自己的项目中检查了代码,它可以使用下面的代码段。我已经根据你的例子做了调整
this.logo = new ImageView(new Image(getClass().getResourceAsStream("/assets/img/myImage.jpg")));
我和你犯了同样的错误。因此,为了更正它,将我的图像放在与我的项目的“src”相同级别的resources文件夹中。这是我的代码,它是有效的
public void showImage() {
try {
Image image = new Image("resources/img/akonolingaMap.jpg");
imageView.setImage(image);
imageView.setCache(true);
} catch (Exception e) {
printStackTrace();
}
}
如果使用Intellij作为主编辑器,则可以将文件夹标记为“资源”,或者只打开“项目结构”->“模块”->,然后将图像文件夹标记为“资源”
希望这将对您有所帮助。将图标/图片所在的文件夹名称更改为“资源”,可以解决此问题。它必须在您当前的src文件夹中,这对我来说很好(我也有同样的问题)。您可以尝试使用
this.logo=new-ImageView(“/assets/img/myImage.jpg”)代码>?应该从文件夹的根目录开始查看代码>,并引发异常。预先准备的文件:
,如下所示:this.logo=newimageview(“文件:/assets/img/myImage.jpg”)代码>并按照问题中提到的方式进行操作。它不会引发任何异常,但会正确加载应用程序,但不会显示图像。还有别的想法吗?感谢您的帮助:)我正在获取一个NullPointerException:输入流不能为null
。我还尝试使用“file:/assets/img/myImage.jpg”
,但也遇到了异常。getResourceAsStream()
在哪里查找文件?你确定你模拟了与我相同的目录结构吗?试着将你的资产文件夹放在你的src文件夹下,这样行吗?(清洁和建造只是为了确保)嗨!谢谢你的回复!如何使/assets
成为顶级源目录?你的答案和Perneel的相似,但对我不起作用。请检查Perneel答案中的注释。在eclipse:重命名资产中,右键单击项目:新建/源文件夹:“资产”。然后移动img文件夹。顺便说一句,maven build infrastructure在IDE中非常棒,它提供了最佳实践、文件夹约定。或者只是在src下添加资产。你能提供一个到maven文档的链接吗?我甚至放弃了建议的目录结构,并将图像文件放在StartPageController.java
的同一文件夹中。通过执行this.logo=new-ImageView(new-Image(getClass().getResourceAsStream(“myImage.jpg”))
我没有得到异常,但是图像没有呈现,这表明它不是关于查找资源,而是关于呈现。可能是因为缺少图书馆吗?我在Windows 8环境中,使用Netbeans 8.0。再次感谢您的回复。最简单的答案。
this.logo = new ImageView(new Image(getClass().getResourceAsStream("/assets/img/myImage.jpg")));
public void showImage() {
try {
Image image = new Image("resources/img/akonolingaMap.jpg");
imageView.setImage(image);
imageView.setCache(true);
} catch (Exception e) {
printStackTrace();
}
}