ImageView не работает в JavaFX

#java

#java #javafx

Вопрос:

не только это, другие коды имеют ту же проблему. просто не могу использовать ImageView.

Среда: macOS, IntelliJ

Вызвано: java.lang.Исключение IllegalArgumentException: недопустимый URL: недопустимый URL или ресурс не найден

 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:

Конструктор изображения принимает URL-адрес в качестве параметра. Если вы не добавляете в него протокол, то предполагается, что элемент выходит из пути к классу. Очевидно, /Users/fangyuan/Desktop/PIC.png этого не будет в вашем classpath.

Для чтения из файла вместо пути к классу вставьте file:// протокол перед путем, который вы хотите прочитать:

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

Или

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

который выводил бы то же самое.