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