2017-05-08 105 views
0

我的目标是能够使用真棒字体和Java GUI。对于这个问题,我搜索并找到了这个question真棒字体:Java中的“pr0blem读字体数据”

我选择了第二个答案用InputStream导入fontawesome-webfont.ttf。我根据需要量身定制了代码,因为我不需要一种方法来达到我的目的。

但是,当涉及到测试它,我得到的错误: “问题阅读字体数据” 在该行:

Font font = Font.createFont(Font.TRUETYPE_FONT, is); 

这是有问题的代码:

try (InputStream is = this.getClass().getResourceAsStream("C:/Users/Prak01/Documents/EclipseWorkspace/Zeiterfassung/fontawesome-webfont.ttf")) { 
    try { 
     Font font = Font.createFont(Font.TRUETYPE_FONT, is); 
     font = font.deriveFont(Font.PLAIN, 24f); 
     TextfieldFont = new JTextField(""); 
     TextfieldFont.setFont(font); 
    } catch (FontFormatException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 
} 

我相信我根据规则做了一切事情。数据路径是正确的。难道是可能的,这是因为...

this.getClass().getResourcesAsStream(); 

因为我是从改变了它:

TestFontAwsome.class.getResourceAsStream(); 

,但我认为,它应该与this.getClass()正常工作。

回答

2

您错误地认为getResourceAsStream的参数应该是文件名。它不是文件名;它是一个相对URL,它针对类路径中的每个条目进行解析。通常,这意味着它应该是同一个.jar文件中的路径。

如果要直接从文件加载Font,请勿使用getResourceAsStream。只要打开它作为一个文件:

try (InputStream is = new BufferedInputStream(
    Files.newInputStream(Paths.get("C:/Users/Prak01/Documents/EclipseWorkspace/Zeiterfassung/fontawesome-webfont.ttf")))) { 

注意:您不需这两个try块。尝试与资源声明允许有一个catch块:

try (InputStream is = new BufferedInputStream(
    Files.newInputStream(Paths.get("C:/Users/Prak01/Documents/EclipseWorkspace/Zeiterfassung/fontawesome-webfont.ttf")))) { 

    // ... 

} catch (FontFormatException e1) { 
    // ... 
} 
+0

谢谢你这工作! – MansNotHot