我正在创建一个带有JEditorPane的Swing应用程序,该应用程序应该在项目的根文件夹中的页文件夹中显示一个名为 url1.html 的HTML文件。
我已经实例化了以下String对象
final String pagePath = "./page/";
并且为了通过JEditorPane窗格显示,我创建了以下URL对象:
URL url1 = new URL("file:///"+pagePath+"url1.html");
但是,当使用创建的URL对象作为参数
调用setPage方法时pagePane.setPage(url1);
它会抛出java.io.FileNotFoundException错误
似乎 url1 的构建方式存在问题。任何人都知道这个问题的解决方案吗?
答案 0 :(得分:13)
解决方案是找到url1.html
在其上生成java.io.File
对象的绝对路径,然后使用toURI().toURL()
组合:
URL url1 = (new java.io.File(absolutePathToHTMLFile)).toURI().toURL();
假设当前目录是page
的根目录,您可以将相对路径传递给File
:
URL url1 = (new java.io.File("page/url1.html")).toURI().toURL();
或
URL url1 = (new java.io.File(new java.io.File("page"), "url1.html")).toURI().toURL();
但这取决于您运行应用程序的位置。如果它是应用程序的唯一可配置选项,或者从配置文件(如果有),我会将根目录作为命令行参数。
另一个解决方案是将html文件作为资源放入应用程序的jar文件中。
答案 1 :(得分:1)
要从类路径加载资源(如khachik所述),您可以执行以下操作:
URL url = getClass().getResource("page/url1.html");
或来自静态背景:
URL url = Thread.currentThread().getContextClassLoader().getResource("page/url1.html");
所以在上面的例子中,使用Maven结构,HTML页面将位于如下位置:
C:/myProject/src/main/resources/page/url1.html
答案 2 :(得分:0)
我会尝试以下
URL url = new URL("file", "", pagePath+"url1.html");
我相信通过连接整个字符串,你遇到了问题。让我知道,如果有帮助