Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java getRessource().getPath()添加了一个奇怪的'/';在URL的开头_Java_Fonts_Swt_Getresource - Fatal编程技术网

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

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/…。如果

我想在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”);
图像图标=新图像(显示,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应用程序。