0

到目前为止我所做的是:

/** Default location of help files folder */
private static final String DEFAULT_PATH = "../../../../resources/files/help/";
/** A 404 error file */
private static final String ERROR_404 = "../../../../resources/files/help/404.html";

/**
 * @param fileName
 * @return The URL of file, if found at default location, otherwise a 404 error page URL.
 */
public static URL getURL(String fileName) throws MalformedURLException{
    URL url = (new File(ERROR_404)).toURI().toURL();
    System.out.println(url);
    url = (new File(DEFAULT_PATH + fileName)).toURI().toURL();
    System.out.println(url);
    return url;
}

输出:

文件:/H:/My%20Project/Project%20Name%20Module/../../../../resources/files/help/404.html 文件:/H:/My%20Project/Project%20Name %20Module/../../../../resources/files/help/plazaCode.html

通过 NetBeans 创建的 JAR 中的文件夹层次结构:

在此处输入图像描述

我在 Windows 7,JDK 7 上。

更新:

实际上,我希望通过以下URL方法JTextPane显示 HTML 页面:

textPane.setPage(URL url);

我能有比这更好的解决方案吗?并具有相同的文件夹层次结构..?

4

3 回答 3

1
  1. 404.html由于这是一个应用程序资源,它可能最终会嵌入到一个 Jar 中。
  2. 无法使用File对象 访问档案中的资源。
  3. URL getURL(String fileName)为避免混淆,请将其更改为URL getURL(String resourceName).
  4. Class.getResource(String)尽可能多地使用您之前的问题中讨论的内容。
  5. '相对' URL 在那个阶段变得危险,因为它们依赖于调用它们的类的包,我通常通过在整个路径前加上一个前缀来使它们成为'绝对',/这实际上意味着'从根目录查找此资源的运行时类路径”。

所以这String可能是(按照已经建议调整其余代码):

private static final String ERROR_404 = "/resources/files/help/404.html";
于 2012-04-07T10:38:50.517 回答
1

您可以使用URL url = getClass().getResource("..."). 可能是“/files/help/404.html”。

于 2012-04-07T10:48:17.507 回答
0

当您以这种方式创建文件时,您将获得一个相对文件(因此是一个相对 URL)。要从该路径获取绝对 URL,您需要先获取绝对文件。试试这个:

new File(ERROR_404).getCanonicalFile().toURI().toURL()

(编辑:在你上面的 JTextPane 信息之后)我从来没有尝试过这个,所以我不知道为什么这不起作用。但这是一个不同的问题,您应该提出一个新问题。

于 2012-04-06T12:11:34.303 回答