Java 问题加载自定义字体

Java 问题加载自定义字体,java,fonts,stream,embedded-resource,ioexception,Java,Fonts,Stream,Embedded Resource,Ioexception,我正在尝试加载slick2d中的字体,该字体(在eclipse中)位于:“resources\fonts\slkscr.ttf”,代码如下: private void loadResources() { try { Font fontRaw = Font.createFont(Font.TRUETYPE_FONT, new BufferedInputStream(Game.class.getClassLoader().

我正在尝试加载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

关于如何防止字体不加载,有什么想法吗?

放一个前导斜杠,指示从类路径的根vis进行搜索

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

作为旁白。
streamclosed
消息可能告诉我们,
createFont
需要一个可重新定位的
InputStream
。请尝试:

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

getResource("/slkscr.ttf")

…取决于路径。

放一个前导斜杠,指示从类路径的根vis开始搜索

..getResourceAsStream("/resources/fonts/slkscr.ttf")..
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);
}

作为旁白。
streamclosed
消息可能告诉我们,
createFont
需要一个可重新定位的
InputStream
。请尝试:

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

getResource("/slkscr.ttf")

…取决于路径。

你加载的字体全错了,你应该看看这里的示例

你加载的字体全错了,你应该看看这里的示例

遗憾的是,这似乎并没有解决问题:(还有其他想法吗?哦,还有,我只是将字体放在项目根目录中,并使用以下行:[code]getResourceAsStream(“slkscr.ttf”)[/code]我仍然会抛出一个异常。如果使用:
getResourceAsStream(“/slkscr.ttf”)
?遗憾的是,这似乎并没有解决问题:(还有其他想法吗?哦,我只是将字体放在项目根目录中,并使用以下行:[code]getResourceAsStream(“slkscr.ttf”)[/code]我仍然会抛出一个异常。如果使用:
getResourceAsStream(“/slkscr.ttf”)
,会发生什么情况?从stacktrace上看,似乎在另一个IOException中有一个IOException,可能是游戏循环中的线程/并发问题?(只是猜测)从stacktrace上看,似乎在另一个IOException中有一个IOException,可能是游戏循环中的线程/并发问题?(只是猜测)请在有机会时给出答案。很高兴您对其进行了排序,但请注意,如果此字体随应用程序一起分发,则在部署时无法将其作为
文件访问。您确实应该尝试我以“作为旁白…”开头的更新。请在有机会时给出答案。很高兴您对其进行了排序,但请注意,如果此字体随应用程序一起分发,则在部署时它将无法作为
文件访问。您应该尝试我以“作为旁白…”开始的更新。是的,这就是我最初加载字体的方式…(自定义字体)你的链接不工作:)是的,这就是我最初加载字体的方式…(自定义字体)你的链接不工作:)
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);
}