gpt4 book ai didi

java - 如何在静态类中加载字体并用作 JAR

转载 作者:行者123 更新时间:2023-11-30 02:35:59 25 4
gpt4 key购买 nike

我尝试将在 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 中的路径。在您的情况下,您应该使用 getResourceAsStreamInputStream 获取到正确的文件:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com