首页 > 解决方案 > 如何将本地 html 文件(不在我的类路径中)加载到 WebView?

问题描述

我正在学习 javafx 并正在创建一个 TodoList 应用程序。我想包含某些功能,如文本样式、使用项目符号列表等,为此我在我的应用程序中添加了一个 HTMLEditor,它存储我的 WebView 加载的 html 文件。为了测试 html 文件的保存和加载,我保存了一个示例“test.html”文件(不在我的类路径中)并希望 WebView 加载它。这是我的一些代码:

主文件

<?xml version="1.0" encoding="UTF-8"?>

<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>

<?import javafx.scene.web.WebView?>
<GridPane xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml" fx:controller="sample.Controller" hgap="10" vgap="10">
    <WebView GridPane.rowIndex="0" GridPane.columnIndex="0" fx:id="webView"/>
</GridPane>

Fxml 控制器.java

public class Controller{

@FXML private WebView webView;
private WebEngine engine = webView.getEngine();

 @FXML
    public void initialize() throws IOException{
        //code for some ArrayList initialization

        engine.load("/home/jyotiproy/TodoOutput/test.html");

    }
}

加载程序的 Main.java

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception{
        Parent root = FXMLLoader.load(getClass().getResource("Main.fxml"));
        primaryStage.setTitle("Todo List");
        primaryStage.setScene(new Scene(root, 1200, 600));
        primaryStage.show();
        primaryStage.setResizable(false);
    }


    public static void main(String[] args) {
        launch(args);
    }
}

我没有收到任何错误或异常。“test.html”的路径中没有错字,html 编辑器工作正常并保存了 test.html,但 WebView 什么也不加载。这是我的应用程序结构: 网络视图 HTML编辑器

标签: javajavafxjavafx-webenginejavafx-webview

解决方案


感谢@Slaw 和@Sidrick,问题得到了解决。原始代码中所需的更改是在代码部分中添加file://engine.load()

工作代码

@FXML private WebView webView;



    @FXML
    public void initialize() throws IOException{
        //Some ArrayList Initialization 

        WebEngine engine = webView.getEngine();
        engine.load("file:///home/jyotiproy/Todolist/test2.html");
    }

截屏:

工作应用


推荐阅读