Java加载自定义字体文件(.ttf)
我在下面使用了这段代码,它提供了以下堆栈跟踪:Java加载自定义字体文件(.ttf),java,fonts,custom-font,Java,Fonts,Custom Font,我在下面使用了这段代码,它提供了以下堆栈跟踪: java.io.FileNotFoundException: font.ttf (No such file or directory) at java.io.FileInputStream.open(Native Method) at java.io.FileInputStream.<init>(FileInputStream.java:146) at java.io.FileInputStream.<in
java.io.FileNotFoundException: font.ttf (No such file or directory)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:146)
at java.io.FileInputStream.<init>(FileInputStream.java:101)
at com.ominious.core.graphics.Assets.getFont(Assets.java:55)
at com.ominious.core.graphics.Assets.loadImages(Assets.java:37)
at com.ominious.core.GamePanel.init(GamePanel.java:63)
at com.ominious.core.GamePanel.run(GamePanel.java:69)
at java.lang.Thread.run(Thread.java:744)
Exception in thread "Thread-1" java.lang.NullPointerException
at com.ominious.core.graphics.Assets.loadImages(Assets.java:49)
at com.ominious.core.GamePanel.init(GamePanel.java:63)
at com.ominious.core.GamePanel.run(GamePanel.java:69)
at java.lang.Thread.run(Thread.java:744)
我称之为:
try {
FONT = getFont("font.ttf");
tileSprites = ImageIO.read(getClass().getResourceAsStream("/mom.gif"));
SPLASH_BACKGROUND = ImageIO.read(getClass().getResourceAsStream("/swag.gif"));
} catch (Exception e) {
Game.logger.log(LogType.ERROR_STACKTRACE);
e.printStackTrace();
}
(以上课程有效,我的图像加载)
这有什么不起作用的原因吗?有更好的方法吗?(是的,我确实在我的目录中有它)很可能是因为您正在用一个jar运行它,并且没有要获取的
文件
对象。将图像加载方式与getResourceAsStream
进行比较,后者可以找到解压为文件(通常用于开发)或打包到jar中的资源。使用相同的getResourceAsStream
调用createFont
从资源中加载字体并不像加载图像那样困难。我知道一年前有人问过这个问题,但我希望最终能给出答案
只需使用文档,它详细说明了如何将自定义字体加载到GraphicsEnvironment
。它应该如下所示:
GraphicsEnvironment ge = null;
try{
ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
ge.registerFont(Font.createFont(Font.TRUETYPE_FONT, game.getClass().getResourceAsStream("/fonts/fantasy.TTF")));
} catch(FontFormatException e){} catch (IOException e){}
注意:我使用classInstance.getClass().getResourceAsStream(stringfiledir)
从Jar文件中的我的资源目录加载该文件
在图形环境中注册字体后,该字体可在调用getAvailableFontFamilyNames()
时使用,并可在字体构造函数中使用
希望这最终能回答你的问题 与试图加载的代码相关的字体存储在哪里?部署时,
font
很可能会成为一种新的字体。在这种情况下,必须通过URL
而不是File
访问资源。请参阅标签,了解形成URL
的方法。我尝试过,它不会抛出堆栈跟踪,但字体不起作用。能给我一个coce/method吗?@user3141055那么问题不在于字体的加载,而是你如何使用它
GraphicsEnvironment ge = null;
try{
ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
ge.registerFont(Font.createFont(Font.TRUETYPE_FONT, game.getClass().getResourceAsStream("/fonts/fantasy.TTF")));
} catch(FontFormatException e){} catch (IOException e){}