Java class.getRessource()。getPath()在URL的开头添加一个奇怪的'/'

问题描述 投票:0回答:1

我想在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(),它可以工作。

另一个奇怪的事情是,这不是我以此方式加载的唯一资源。例如,这就是我加载窗口图标的方式:

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

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

java fonts swt getresource
1个回答
0
投票

/开头的原因是getPath类的URL返回由RFC 2396定义的URL路径(请参阅javadocs)。

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

由于在两种情况下都期望使用文件路径,所以您要使用File类或Paths.get(url.toURI()).toString()方法对路径进行规范化。

© www.soinside.com 2019 - 2024. All rights reserved.