Issue loading custom font

陌路散爱 提交于 2019-12-24 00:28:11

问题


I am attempting to load a font, in slick2d, which (in eclipse) is located at: "resources\fonts\slkscr.ttf" with the following code:

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();
    }
}

The stack trace prints:

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

Any ideas regarding how I could prevent the font from not loading?


回答1:


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);
}



回答2:


Put a leading slash to indicate to search from the root of the class-path, vis.

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

As an aside. That stream closed message might be telling us that createFont requires a repositionable InputStream. Try instead:

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

..or..

getResource("/slkscr.ttf")

..depending upon path.




回答3:


You're loading the font all wrong, you should look at the examples here Slick Wiki - True Type Fonts



来源:https://stackoverflow.com/questions/10894426/issue-loading-custom-font

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!