2017-07-25 69 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() 

這將輸出同樣的事情。