我尝试了几次,用了几种方法,但是我不能像我想要的那样在舞台上显示我的图像。我认为这可能与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")))
我没有收到任何异常,但是图片没有渲染,这表明它与找到资源无关,而是与呈现图像有关。可能是缺少任何库吗?我在使用Netbeans 8.0的Windows 8环境下。再次感谢您的回答。
第二个问题:
我刚刚在Netbeans项目属性中停用了打包和分发应用程序。现在图像正在正确地渲染,但我认为问题还没有解决,因为当我需要分发软件时它将再次出现。请仍然需要帮助!:)
this.logo = new ImageView("/assets/img/myImage.jpg");
吗?这将从您文件夹的根目录开始查找。 - Perneelthis.logo = new ImageView("/assets/img/myImage.jpg");
,但抛出了异常。在前面添加file:
,像这样:this.logo = new ImageView("file:/assets/img/myImage.jpg");
,并按照问题中提到的行为进行操作。它不会抛出任何异常,但正确加载应用程序,除了未显示图像。还有其他想法吗?感谢您的帮助 :) - Throoze