作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试将在 Eclipse 中运行完美的游戏导出到可运行的 jar 文件。它没有正确启动,因此我尝试使用终端启动它,但收到了此错误消息:
java.io.IOException: Can't read res\fonts\slkscr.ttf
at java.awt.Font.createFont(Unknown Source)
at dev.tilegame.gfx.FontLoader.loadFont(FontLoader.java:12)
at dev.tilegame.gfx.Assets.init(Assets.java:21)
at dev.tilegame.Game.init(Game.java:55)
at dev.tilegame.Game.run(Game.java:93)
at java.lang.Thread.run(Unknown Source)
我使用 Assets 类来存储我的所有 Assets :
public static void init() {
font28 = FontLoader.loadFont("res/fonts/slkscr.ttf", 28);
font52 = FontLoader.loadFont("res/fonts/slkscr.ttf", 52);
这就是FontLoader:
public class FontLoader {
public static Font loadFont(String path, float size){
try {
return Font.createFont(Font.TRUETYPE_FONT, new File(path)).deriveFont(Font.PLAIN, size);
} catch (FontFormatException | IOException e) {
e.printStackTrace();
System.exit(1);
}
return null;
}
}
-谢谢
编辑:
实体管理器:
public class EntityManager {
private Handler handler;
private Player player;
private ArrayList<Entity> entities;
private ArrayList<Entity> postentities;
Iterator<Entity> it;
private Comparator<Entity> renderSorter = new Comparator<Entity>() {
@Override
public int compare(Entity a, Entity b) {
if (a.getY() + a.getHeight() < b.getY() + b.getHeight())
return -1;
return 1;
}
};
public EntityManager(Handler handler, Player player) {
this.handler = handler;
this.player = player;
entities = new ArrayList<Entity>();
postentities = new ArrayList<Entity>();
addEntity(player);
}
public void tick() {
Iterator<Entity> it = entities.iterator();
while (it.hasNext()) {
Entity e = it.next();
e.tick();
if (!e.isActive())
it.remove();
}
for (int i = 0; i < postentities.size(); i++) {
entities.add(postentities.get(i));
postentities.remove(i);
}
entities.sort(renderSorter);
}
public void render(Graphics g) {
for (Entity e : entities) {
e.render(g);
}
player.postRender(g);
}
public void addEntity(Entity e) {
entities.add(e);
}
public void postaddEntity(Entity e) {
postentities.add(e);
}
最佳答案
您遇到的问题是,当您有 JAR 中的文件路径时,它是一个不透明 URL。这意味着它并不代表实际的文件,而是代表压缩 JAR 中的路径。在您的情况下,您应该使用 getResourceAsStream
将 InputStream
获取到正确的文件:
public static Font loadFont(String path, float size){
try {
Font f = Font.createFont(Font.TRUETYPE_FONT, FontLoader.class.getResourceAsStream(path));
return f.deriveFont(size);
} catch (FontFormatException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
请注意,路径应以斜杠开头;这代表 jar 文件的根目录。 (例如,“res/fonts/slkscr.ttf”
变为“/res/fonts/slkscr.ttf”
)
关于java - 如何在静态类中加载字体并用作 JAR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43053114/
我是一名优秀的程序员,十分优秀!