【问题标题】:Issue loading custom font加载自定义字体的问题
【发布时间】:2012-06-09 07:13:00
【问题描述】:

我正在尝试在 slick2d 中加载字体,该字体(在 eclipse 中)位于:"resources\fonts\slkscr.ttf",代码如下:

private void loadResources()  {
    try  {
        Font fontRaw = Font.createFont(Font.TRUETYPE_FONT, 
            new BufferedInputStream(Game.class.getClassLoader().
                getResourceAsStream("resources/fonts/slkscr.ttf")));
        Font fontBase = fontRaw.deriveFont(Font.PLAIN, 20);

        this.font = new TrueTypeFont(fontBase, false);
    } catch (IOException e)  {
        e.printStackTrace();
    } catch (FontFormatException e) {
        e.printStackTrace();
    }
}

堆栈跟踪打印:

java.io.IOException: Stream closed 
    at java.io.BufferedInputStream.getInIfOpen(BufferedInputStream.java:151) 
    at java.io.BufferedInputStream.read1(BufferedInputStream.java:273) 
    at java.io.BufferedInputStream.read(BufferedInputStream.java:334) 
    at java.io.FilterInputStream.read(FilterInputStream.java:107) 
    at java.awt.Font.createFont(Font.java:885) 
    at org.darestium.applications.games.game.EditorState.loadResources(EditorState.java:43) 
    at org.darestium.applications.games.game.EditorState.init(EditorState.java:61) 
    at org.darestium.applications.games.game.Game.initStatesList(Game.java:36) 
    at org.newdawn.slick.state.StateBasedGame.init(StateBasedGame.java:164) 
    at org.newdawn.slick.AppGameContainer.setup(AppGameContainer.java:390) 
    at org.newdawn.slick.AppGameContainer.start(AppGameContainer.java:314) 
    at org.darestium.applications.games.game.Game.main(Game.java:31) java.io.IOException: Stream closed 
    at java.io.BufferedInputStream.getInIfOpen(BufferedInputStream.java:151) 
    at java.io.BufferedInputStream.read1(BufferedInputStream.java:273) 
    at java.io.BufferedInputStream.read(BufferedInputStream.java:334) 
    at java.io.FilterInputStream.read(FilterInputStream.java:107) 
    at java.awt.Font.createFont(Font.java:885) 
    at org.darestium.applications.games.game.EditorState.loadResources(EditorState.java:43) 
    at org.darestium.applications.games.game.EditorState.init(EditorState.java:61) 
    at org.newdawn.slick.state.StateBasedGame.init(StateBasedGame.java:171) 
    at org.newdawn.slick.AppGameContainer.setup(AppGameContainer.java:390) 
    at org.newdawn.slick.AppGameContainer.start(AppGameContainer.java:314) 
    at org.darestium.applications.games.game.Game.main(Game.java:31) 
Mon Jun 04 18:36:32 EST 2012 ERROR:null

关于如何防止字体无法加载的任何想法?

【问题讨论】:

  • 从堆栈跟踪看来,您在另一个 IOException 中有一个 IOException,可能是您的游戏循环中的线程/并发问题? (只是猜测)

标签: java fonts stream embedded-resource ioexception


【解决方案1】:

放置一个前导斜杠表示从类路径的根目录开始搜索,vis。

..getResourceAsStream("/resources/fonts/slkscr.ttf")..

顺便说一句。 stream closed 消息可能告诉我们createFont 需要可重新定位的InputStream。试试吧:

getResource("/resources/fonts/slkscr.ttf")

..或..

getResource("/slkscr.ttf")

..取决于路径。

【讨论】:

  • 遗憾的是,这似乎并没有解决问题:(还有其他想法吗?
  • 哦,另外,我只是将字体放在项目根目录中并使用以下行: [code]getResourceAsStream("slkscr.ttf")[/code] 我仍然抛出异常。
  • 如果你使用:getResourceAsStream("/slkscr.ttf") 会发生什么?
【解决方案2】:
private void loadResources() throws FontFormatException, IOException  {
        Font fontRaw = Font.createFont(Font.TRUETYPE_FONT, new File("resources/fonts/slkscr.ttf"));
        Font fontBase = fontRaw.deriveFont(28f);
        this.font = new TrueTypeFont(fontBase, false);
}

【讨论】:

  • 有机会请accept回答。很高兴您对其进行了排序,但请注意,如果此字体与应用程序一起分发,则在部署时将无法作为 File 访问。你真的应该试试我从 “顺便说一句..”开始的更新。.
【解决方案3】:

你加载的字体都错了,你应该看看这里的例子Slick Wiki - True Type Fonts

【讨论】:

  • 是的,这就是我最初加载字体的方式...(自定义字体)
  • 您的链接不起作用..:)
猜你喜欢
  • 1970-01-01
  • 2014-05-19
  • 2013-02-26
  • 2020-04-09
  • 2018-02-23
  • 2012-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多