使用相对路径创建URL对象

时间:2010-11-22 16:34:37

标签: java swing jeditorpane

我正在创建一个带有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 的构建方式存在问题。任何人都知道这个问题的解决方案吗?

3 个答案:

答案 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");

我相信通过连接整个字符串,你遇到了问题。让我知道,如果有帮助

相关问题