Java 如何将本地html文件(不在类路径中)加载到WebView?

Java 如何将本地html文件(不在类路径中)加载到WebView?,java,javafx,javafx-webengine,javafx-webview,Java,Javafx,Javafx Webengine,Javafx Webview,我正在学习javafx,正在创建一个TodoList应用程序。我想包括某些功能,如文本样式、使用项目符号列表等。为此,我在我的应用程序中添加了一个HTMLEditor,它存储html文件以供我的WebView加载。为了测试html文件的保存和加载,我保存了一个示例“test.html”文件(它不在我的类路径中),并希望WebView加载它。 以下是我的一些代码: Main.fxml <?xml version="1.0" encoding="UTF-8"?> <?import

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

Main.fxml

<?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>
加载程序的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不加载任何内容。 以下是我的应用程序结构:
多亏了@Slaw和@Sidrick,问题才得以解决。 原始代码中需要的更改是在
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");
    }
屏幕截图:


读取为
文件
。将文件内容转换为
字符串
字符串htmlString=新字符串(Files.readAllBytes(path.get(filePath))@Sedrick使用了以下命令:`File f=new File(“/home/jyotiproy/TodoOutput/test.html”);engine.load(f.toString());`仍然没有。这些方法需要一个
字符串形式的URL。尝试类似于
的方法file:///home/jyotiproy/TodoOutput/test.html“
。如果您使用@Sedrick建议的方法(即将文件内容读入
字符串
),则您将希望使用。切勿实例化要由
FXMLLoader
注入的字段。您所引用的
WebEngine
与您创建的
WebView
相关联,而不是由
fxmloader
创建(并注入)的
WebView
(即显示的一个)。它不完整-我无法将文件放入IDE中,编译并运行以重现您的问题。您描述的问题之一是,代码运行时没有错误,但无法产生所需的结果。原因很明显,在您添加(然后)的代码图像中。但是,您当前显示的代码(假设正常执行)将导致
NullPointerException
,因为您没有显示
webView
字段的错误初始化。有一个简单的
Application
类也很好。注意,我也不是一个反对者,只是想补充一点:请记住,a就是这个问题的一个例子。我经常在新用户身上看到的一件事是,他们倾向于代码转储整个项目(不是最小的),或者干脆省略至少一半他们认为不相关(不完整)的代码。该示例应专门针对堆栈溢出创建,并包含最少的代码来重现问题。该链接提供了一些关于如何隔离问题的有用提示,在执行此操作的过程中,用户甚至可以自己解决问题。现在看起来很好:)作为最后的挑剔:minimal不应包含任何无关的内容。。例如关于不相关的ommitted行的代码注释,但这当然不重要@kleopatra明白了。下次我会记住这些事情的!谢谢!:)
@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");
    }