Java 创建具有相对路径的URL对象

Java 创建具有相对路径的URL对象,java,swing,jeditorpane,Java,Swing,Jeditorpane,我正在创建一个带有JEditorPane的Swing应用程序,它应该显示一个名为url1.HTML的HTML文件,该文件存储在项目根文件夹的页面文件夹中 我已经实例化了以下字符串对象 final String pagePath = "./page/"; 为了在JEditorPane窗格中显示,我创建了以下URL对象: URL url1 = new URL("file:///"+pagePath+"url1.html"); 但是,当使用创建的URL对象作为参数调用setPage方法时 page

我正在创建一个带有JEditorPane的Swing应用程序,它应该显示一个名为url1.HTML的HTML文件,该文件存储在项目根文件夹的页面文件夹中

我已经实例化了以下字符串对象

final String pagePath = "./page/";
为了在JEditorPane窗格中显示,我创建了以下URL对象:

URL url1 = new URL("file:///"+pagePath+"url1.html");
但是,当使用创建的URL对象作为参数调用setPage方法时

pagePane.setPage(url1);
它向我抛出一个java.io.FileNotFoundException错误


似乎url1的构造方式有问题。有人知道这个问题的解决方案吗?

解决方案是找到
url1.html
的绝对路径,在其上创建
java.io.File
对象,然后使用
toURI().toURL()
组合:

URL url1 = (new java.io.File(absolutePathToHTMLFile)).toURI().toURL();
假设当前目录是
页面
的根目录,则可以将相对路径传递到
文件

URL url1 = (new java.io.File("page/url1.html")).toURI().toURL();

但这将取决于从何处运行应用程序。如果根目录是应用程序唯一可配置的选项,我会将其作为命令行参数,如果它有配置文件,我会将其作为配置文件


另一种解决方案是将html文件作为资源放入应用程序的jar文件中

URL url = new URL("file", "", pagePath+"url1.html");

我相信通过连接整个字符串,您会遇到问题。让我知道,如果这有助于从类路径加载资源(如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
C:/myProject/src/main/resources/page/url1.html