2016-05-21 20 views
7

Tôi muốn tải một tệp HTML trong ứng dụng WebView của ứng dụng JavaFX của tôi. Tệp nằm trong thư mục dự án của tôi, bên trong gói webviewsample.Xử lý tài nguyên JavaFX: Tải các tệp HTML trong WebView

Tôi đã sử dụng đoạn mã sau:

public void start(Stage primaryStage) throws Exception { 
    primaryStage.setTitle("WebView test");    

    WebView browser = new WebView(); 
    WebEngine engine = browser.getEngine(); 
    String url = WebViewSample.class.getResource("/map.html").toExternalForm(); 
    engine.load(url); 

    StackPane sp = new StackPane(); 
    sp.getChildren().add(browser); 

    Scene root = new Scene(sp); 

    primaryStage.setScene(root); 
    primaryStage.show(); 
} 

Nhưng nó ném một ngoại lệ nói:

ngoại lệ trong phương pháp bắt đầu ứng dụng java.lang.reflect.InvocationTargetException

Trả lời

11

Bạn nhận ngoại lệ này vì biến số url của bạn là không trên dòng này:

String url = WebViewSample.class.getResource("/map.html").toExternalForm(); 

Bạn có nhiều lựa chọn với getResource():

Nếu tài nguyên là thư mục tương tự như lớp, sau đó bạn có thể sử dụng

String url = WebViewSample.class.getResource("map.html").toExternalForm(); 

Sử dụng bắt đầu dấu gạch chéo ("/") có nghĩa là đường dẫn tương đối đến gốc của dự án.:

Trong trường hợp cụ thể của bạn, nếu tài nguyên được lưu trữ trong gói webviewsample, bạn có thể nhận được tài nguyên như:

String url = WebViewSample.class.getResource("/webviewsample/map.html").toExternalForm(); 

Sử dụng một bắt đầu dot-slash ("./") có nghĩa là tương đối đường dẫn đến đường dẫn của lớp:

Hãy tưởng tượng rằng bạn lớp được lưu trữ trong gói webviewsample và tài nguyên của bạn (map.html) được lưu trữ trong thư mục con res. Bạn có thể sử dụng lệnh này để có được URL:

String url = WebViewSample.class.getResource("./res/map.html").toExternalForm(); 

Trên cơ sở này, nếu nguồn của bạn là trong cùng thư mục với lớp học của bạn, sau đó:

String url = WebViewSample.class.getResource("map.html").toExternalForm(); 

String url = WebViewSample.class.getResource("./map.html").toExternalForm(); 

tương đương.

Để đọc thêm, bạn có thể kiểm tra the documentation of getResource().

+0

Cảm ơn bạn. Problem Solved –

+0

Câu trả lời rất hay! – GOXR3PLUS

Các vấn đề liên quan