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);
而且效果很好。唯一存在问题的文件是字体文件。有人知道为什么吗?
/
开头的原因是URL
classgetPath
returns由[定义的URL路径=19=]).
至于为什么它对 Image
构造函数起作用而不对 loadFont()
方法起作用,可以在实现中找到答案。
构造函数使用 FileInputStream
在内部规范化路径,而 loadFont()
具有不支持此类路径的本地加载实现。
由于在这两种情况下都需要文件路径,因此您要做的是使用 File
构造函数或 Paths.get(url.toURI()).toString()
方法自行规范化路径。
我想在 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);
而且效果很好。唯一存在问题的文件是字体文件。有人知道为什么吗?
/
开头的原因是URL
classgetPath
returns由[定义的URL路径=19=]).
至于为什么它对 Image
构造函数起作用而不对 loadFont()
方法起作用,可以在实现中找到答案。
构造函数使用 FileInputStream
在内部规范化路径,而 loadFont()
具有不支持此类路径的本地加载实现。
由于在这两种情况下都需要文件路径,因此您要做的是使用 File
构造函数或 Paths.get(url.toURI()).toString()
方法自行规范化路径。