我想在SWT中加载一个字体。我的ttf文件位于我的Maven项目的resources/fonts
目录中。我试着这样加载:
URL fontURL = MyClass.class.getResource("/fonts/myfont.ttf");
boolean fontLoaded = display.loadFont(fontURL.getPath());
但是得到的布尔值总是false。我试图提示fontURL.getPath()
的结果,它有点像/C:/Users/myuser/Documents/...
。如果我将这个结果复制到String中,删除第一个/并尝试用它调用display.loadFont()
,它就可以工作了。
另一件奇怪的事情是,这并不是我以这种方式加载的唯一资源。例如,这就是我加载窗口图标的方式:
URL iconURL = MyClass.class.getResource("/images/myicon.png");
Image icon = new Image(display, iconURL.getPath());
shell.setImage(icon);
而且效果很好。唯一存在问题的文件是字体文件。有人知道为什么吗?
/
在开头的原因是URL
类的getPath
返回由RFC 2396定义的URL路径(请参阅javadocs(。
至于为什么它对Image
构造函数有效而对loadFont()
方法无效,可以在实现中找到答案。构造函数使用内部规范化路径的FileInputStream
,而loadFont()
有一个用于加载的本机实现,它不支持这种路径。
由于在这两种情况下都需要一个文件路径,所以您要做的是使用File
构造函数或Paths.get(url.toURI()).toString()
方法自己规范化路径。