如何在SceneBuilder中为ImageView正确指定URL

时间:2019-05-09 11:07:48

标签: java eclipse javafx

我具有以下项目结构:

src
    com.hello
        RootController

resources
    com.hello
        root.fxml
        image.png

在scenebuilder中,我添加了一个ImageView节点,然后将路径设置为@image.png。它在SceneBuilder中工作正常,但是如果我在Eclipse中运行它,则会出现以下错误:

Caused by: java.lang.IllegalArgumentException: Invalid URL: Invalid URL or resource not found
    at javafx.scene.image.Image.validateUrl(Image.java:1118)
    at javafx.scene.image.Image.<init>(Image.java:693)
    at com.sun.javafx.fxml.builder.JavaFXImageBuilder.build(JavaFXImageBuilder.java:47)
    at com.sun.javafx.fxml.builder.JavaFXImageBuilder.build(JavaFXImageBuilder.java:37)
    at javafx.fxml.FXMLLoader$ValueElement.processEndElement(FXMLLoader.java:763)
    at javafx.fxml.FXMLLoader.processEndElement(FXMLLoader.java:2823)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2532)
    ... 11 more
Caused by: java.lang.IllegalArgumentException: Invalid URL or resource not found
    at javafx.scene.image.Image.validateUrl(Image.java:1110)
    ... 17 more

在给定项目结构的情况下,如何正确指定图像路径?

2 个答案:

答案 0 :(得分:1)

在fxml文件中,将图像的相对路径设置为图像路径。

 <ImageView fitHeight="17.0" fitWidth="22.0" pickOnBounds="true" preserveRatio="true">
           <image>
              <Image url="@/com/hello/image.png" />
           </image>
 </ImageView>

答案 1 :(得分:0)

尝试这种方式。

private ImageView imageView = new ImageView();

String url = "/images/cards/As.png";
Image image = new Image(getClass().getResourceAsStream(url));
        imageView .setFitHeight(726); //Set your image Height
        imageView .setFitWidth(500); //Set your image width.
        imageView .setImage(image);

有时相对路径无法正确识别资源文件,但是/images/cards/As.png将斜杠/放在url处可以识别资源。

希望您能得到答案。