Java class.getRessource().get Path() 在 URL 的开头添加了一个奇怪的'/'

Java class.getRessource().getPath() adds a weird '/' at the begining of the URL

我想在 SWT 中加载字体。我的 ttf 文件在我的 Maven 项目的 resources/fonts 目录中。我尝试这样加载它:

URL fontURL = MyClass.class.getResource("/fonts/myfont.ttf");
boolean fontLoaded = display.loadFont(fontURL.getPath());

但生成的布尔值始终为假。我试着提示fontURL.getPath()的结果,结果是/C:/Users/myuser/Documents/...这样的。如果我将此结果复制到一个字符串中,删除第一个 / 并尝试用它调用 display.loadFont(),它会起作用。

另一件奇怪的事情是,这不是我以这种方式加载的唯一资源。例如,这就是我加载 window:

图标的方式
URL iconURL = MyClass.class.getResource("/images/myicon.png");
Image icon = new Image(display, iconURL.getPath());
shell.setImage(icon);

而且效果很好。唯一存在问题的文件是字体文件。有人知道为什么吗?

/开头的原因是URLclassgetPathreturns由[定义的URL路径=19=]).

至于为什么它对 Image 构造函数起作用而不对 loadFont() 方法起作用,可以在实现中找到答案。 构造函数使用 FileInputStream 在内部规范化路径,而 loadFont() 具有不支持此类路径的本地加载实现。

由于在这两种情况下都需要文件路径,因此您要做的是使用 File 构造函数或 Paths.get(url.toURI()).toString() 方法自行规范化路径。