我想在我的游戏中包含一个名为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正在寻找文件的错误文件夹。感谢。
答案 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或文件的真实位置。