如何在java中加载字体?

时间:2014-06-20 23:20:00

标签: java

我想在我的游戏中包含一个名为Fixedsys的字体,这是我使用的代码:

try{
    Font myFont = null;
    File fontFile = new File("Fixedsys.ttf");
    if(fontFile.exists()){
        myFont = Font.createFont(Font.TRUETYPE_FONT, fontFile).deriveFont(Font.PLAIN, 22f);

        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
        ge.registerFont(myFont);
        System.out.println("Not null");
    }else{
        System.out.println("FILE DOES NOT EXIST");
    }
} catch (FontFormatException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

出于某种原因,Java认为该文件不存在并打印出FILE DOES NOT EXIST行。我搜索了谷歌和stackoverflow,但当我使用时,没有一个工作:

myComponent.setFont(myFont);

我收到错误说:

cannot find variable myFont

我一遍又一遍地检查,但似乎没有错。

编辑:我删除了if(file.exists())行,我得到了一个不同的错误。我明白了:

Cannot read Fixedsys.ttf !

编辑2:ug_的评论证明是正确的。 Java正在寻找文件的错误文件夹。感谢。

2 个答案:

答案 0 :(得分:2)

myFont变量是catch块内的局部变量,因此在其他任何地方都不存在。

你必须使它成为一个类变量才能在catch块之外使用它。

像这样:

class SomeClass {

   // declare here
   private Font myFont;

   public SomeClass() {

            try{
                // initialize here
                File fontFile = new File("Fixedsys.ttf");
                if(fontFile.exists()){
                myFont = Font.createFont(Font.TRUETYPE_FONT, fontFile).deriveFont(Font.PLAIN, 22f);

                GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
                ge.registerFont(myFont);
                System.out.println("Not null");
                }else{
                    System.out.println("FILE DOES NOT EXIST");
                }
            } catch (FontFormatException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

   }

   // somewhere else:
   myComponent.setFont(myFont);

}

答案 1 :(得分:0)

真正的答案是该路径位置不存在字体文件。查看Windows \ Fonts或文件的真实位置。