IOException при загрузке шрифта Java - PullRequest
0 голосов
/ 24 сентября 2018

Я реализую графический интерфейс для шахматной программы, которую я пишу для класса.Чтобы это выглядело изысканно, я хочу использовать шрифт Chess Piece, полученный из интернета.

Файл chess.ttf находится по пути Chess / resources / chess.ttf.Я использую следующий код в соответствии с инструкциями Oracle (https://docs.oracle.com/javase/tutorial/2d/text/fonts.html):

try {
            File file = new File("resources/chess.ttf");

            //Returned font is of pt size 1
            Font font = Font.createFont(Font.TRUETYPE_FONT, file);

            GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
            ge.registerFont(Font.createFont(Font.TRUETYPE_FONT, file)); 

            //Derive and return a 12 pt version:
            //Need to use float otherwise
            //it would be interpreted as style

            return font.deriveFont(12f);
        } 

    catch (IOException|FontFormatException e) {
        System.out.println("-Font Error-");
        return null;
    }

. Однако, это вызывает исключение IOException. Я запустил getAbsolutePath () для файла и получил / Users / [me] / eclipse-workspace / Chess/resources/chess.ttf, поэтому я предполагаю, что файл загружается правильно. Кто-нибудь знает, что не так с моим кодом?

edit: проблема решена? Я пробовал InputStreams, как предлагалось, но это не сработалоТем не менее, после возврата моего кода компьютер, наконец, перестал генерировать IOExceptions. Разве код не лучший?

1 Ответ

0 голосов
/ 24 сентября 2018

Вам лучше скопировать ttf, используя скрипт сборки, например, ant или maven / Users / [me] / eclipse-workspace / Chess / bin / resources

    ClassLoader loader = Thread.currentThread().getContextClassLoader();
    System.out.println(loader.getResource(".").getPath()); // for tracing the working folder only
    java.io.InputStream ins = loader.getResourceAsStream("resources/chess.ttf");
    //Returned font is of pt size 1
    Font font = Font.createFont(Font.TRUETYPE_FONT, ins);
...