Java getRessource().getPath()添加了一个奇怪的'/';在URL的开头
我想在SWT中加载字体。我的ttf文件位于Maven项目的Java getRessource().getPath()添加了一个奇怪的'/';在URL的开头,java,fonts,swt,getresource,Java,Fonts,Swt,Getresource,我想在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/…。如果
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”);
图像图标=新图像(显示,iconURL.getPath());
shell.setImage(图标);
而且效果很好。造成问题的唯一文件是字体文件。有人知道原因吗?开头的
/
原因是URL
类的getPath
返回由定义的URL路径(请参阅)
至于为什么它适用于Image
构造函数而不适用于loadFont()
方法,可以在实现中找到答案。
构造函数使用FileInputStream
对路径进行内部规范化,而loadFont()
有一个本地加载实现,不支持这种路径
因为在这两种情况下都需要文件路径,所以您要做的是使用
file
constructor或Paths.get(url.toURI()).toString()规范化路径
方法。注意:当您在单独的文件中进行测试时,使用文件路径加载可能会起作用,但当您构建一个包含所有内容的jar时,它将停止工作,因为jar中的资源不是文件,无法使用文件路径寻址。这只是您正在构建的一个SWT应用程序,还是一个Eclipse插件(加载资源的方式不同)?别担心,我知道。构建结果是一个zip,其中包含JAR和资源。这是我正在构建的SWT应用程序。