我已经尝试了几次和几种方法,但我无法按照自己的意愿在舞台上展示我的图像。我认为它可能与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的项目属性中停用了打包和分发应用程序。现在图像正确呈现,但我不认为问题已经解决,因为当我需要分发软件时,它将重新出现。请,仍然需要帮助! :)
答案 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文件夹中,这对我来说很好(我遇到了同样的问题)。