【发布时间】:2014-08-07 05:48:25
【问题描述】:
我已经尝试了好几次和几种方法,但我无法让我的形象如我所愿地在舞台上展示。我认为这可能与 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")))
我没有遇到任何异常,但图像没有呈现,这表明我不是寻找资源,而是呈现图像。可能是缺少任何图书馆吗?我在 Windows 8 环境中,使用 Netbeans 8.0。再次感谢您的回答。
第二
我刚刚在 Netbeans 的项目属性中停用了打包和分发应用程序。现在图像可以正确渲染,但我认为问题没有解决,因为当我需要分发软件时,它会重新出现。请,仍然需要帮助! :)
【问题讨论】:
-
你可以试试
this.logo = new ImageView("/assets/img/myImage.jpg");吗?这应该从文件夹的根目录开始。 -
试过
this.logo = new ImageView("/assets/img/myImage.jpg");,并抛出异常。预先添加file:,如下所示:this.logo = new ImageView("file:/assets/img/myImage.jpg");并按照问题中提到的方式行事。它不会引发任何异常,但会正确加载应用程序,但未显示的图像除外。还有什么想法吗?感谢您的帮助:)
标签: java image javafx-2 javafx-8 fxml