2017-07-25 67 views
0

不只是这样,其他代码也有同样的问题。只是不能使用ImageView。ImageView在JavaFX中不起作用

环境: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

Image构造函数接受一个url作为参数。如果你没有在其中添加一个协议,那么它假定该项目来自类路径。很显然,/Users/fangyuan/Desktop/PIC.png将不在您的类路径中。

从文件而不是classpath中读取,然后粘在道路前方的file://协议要阅读:

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

或者

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

这将输出同样的事情。