2012-06-05 4 views
2

Я пытаюсь загрузить шрифт, в slick2d, который (в затмении) находится по адресу: "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 

Любые идеи относительно того, как я мог предотвратить шрифт от загрузки?

+0

Из StackTrace это выглядит как у вас есть IOException внутри другого IOException, может быть проблема потокового/параллелизма в вашей игре цикл? (просто догадываясь) – higuaro

ответ

3
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); 
} 
+0

Устанавливает ли этот код проблему? –

+0

@AndrewThompson Да, – Darestium

+0

Пожалуйста, ] (http://meta.stackexchange.com/a/65088/155831) ответ, когда вы получаете шанс. Рад, что вы его отсортировали, но обратите внимание, что если этот шрифт распространяется вместе с приложением, он не будет доступен как «Файл» во время развертывания. Вы действительно должны попробовать обновление, которое я начал с * «Как в стороне ..» *. –

0

Поместите ведущую косую черту, указывающую на поиск от корня пути к классу.

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

Как и в сторону. Это сообщение stream closed может сообщать нам, что createFont требует повторного использования InputStream. Попробуйте вместо этого:

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

..or ..

getResource("/slkscr.ttf") 

..depending на пути.

+0

К сожалению, это, похоже, не исправить проблему :(Любые другие идеи? – Darestium

+0

О, я просто просто помещаю шрифт в корневой каталог проекта и использую следующую строку: [code] getResourceAsStream ("slkscr. ttf ") [/ code] Я все еще получаю исключение. – Darestium

+0

Что произойдет, если вы используете:' getResourceAsStream ("/ slkscr.ttf") '? – higuaro

0

Вы загружая шрифт все не так, вы должны смотреть на примерах здесь Slick Wiki - True Type Fonts

+0

Да, это то, как я загружал шрифты изначально ... (пользовательские шрифты) – Darestium

+0

ВАША ССЫЛКА НЕ РАБОТАЕТ .. :) –

+0

Дайте http://ninjacave.com/slickutil3 попробовать. –

Смежные вопросы