ImageView在JavaFX中不起作用

时间:2017-07-25 03:57:12

标签: java javafx

不仅如此,其他代码也有同样的问题。只是不能使用ImageView。

环境:macOS,IntelliJ

引起:java.lang.IllegalArgumentException:无效的网址:找不到无效的网址或资源

public class ShowHboxVbox extends Application {

    static  String s = "/Users/fangyuan/Desktop/PIC.png";

    @Override
    public void start(Stage primaryStage) {
        BorderPane borderPane = new BorderPane();
        borderPane.setTop(getHbox());

        Scene scene = new Scene(borderPane);
        primaryStage.setTitle("title");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    private HBox getHbox() {
        HBox hBox = new HBox(15);
        hBox.setPadding(new Insets(15,15,15,15));
        hBox.setStyle("-fx-background-color: gold");
        hBox.getChildren().add(new Button("computer science"));
        hBox.getChildren().add(new Button("chemist"));
        ImageView imageView = new ImageView(new Image(s));
        hBox.getChildren().add(imageView);
        return hBox;
    }
}

1 个答案:

答案 0 :(得分:1)

Image构造函数将url作为参数。如果您没有在其中放置协议,则它会假定该项目脱离了类路径。显然,/Users/fangyuan/Desktop/PIC.png不会出现在你的类路径中。

要从文件而不是类路径中读取,请将file://协议粘贴在您要阅读的路径前面:

file:///Users/fangyuan/Desktop/PIC.png

或者

Paths.get("/Users/fangyuan/Desktop/PIC.png").toUri().toString()

会输出同样的东西。