我使用libgdx库创建了一个小游戏并将其导出到可执行jar。在Eclipse中游戏工作正常,但是jar崩溃了:
PS E:\Workspaces\JavaGames\Executable Jars> java -jar Pk2.jar
SetToNewScreen called
Exception in thread "LWJGL Application" com.badlogic.gdx.utils.GdxRuntimeException: Couldn't load file: img/player/player_16_down.png
at com.badlogic.gdx.graphics.Pixmap.<init>(Pixmap.java:140)
at com.badlogic.gdx.graphics.glutils.FileTextureData.prepare(FileTextureData.java:64)
at com.badlogic.gdx.graphics.Texture.load(Texture.java:130)
at com.badlogic.gdx.graphics.Texture.<init>(Texture.java:121)
at com.badlogic.gdx.graphics.Texture.<init>(Texture.java:100)
at com.badlogic.gdx.graphics.Texture.<init>(Texture.java:92)
at org.hofrob.entities.Player.<init>(Player.java:29)
at org.hofrob.screens.misc.Play.show(Play.java:121)
at com.badlogic.gdx.Game.setScreen(Game.java:61)
at org.hofrob.screens.Screenmanager.setToNewScreen(Screenmanager.java:63)
at org.hofrob.pkgame.MyPkGame.create(MyPkGame.java:20)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:136)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:114)
Caused by: com.badlogic.gdx.utils.GdxRuntimeException: File not found: img\player\player_16_down.png (Internal)
at com.badlogic.gdx.files.FileHandle.read(FileHandle.java:136)
at com.badlogic.gdx.files.FileHandle.readBytes(FileHandle.java:220)
at com.badlogic.gdx.graphics.Pixmap.<init>(Pixmap.java:137)
... 12 more
有问题的一行是:
private final Sprite player_down =
new Sprite(new Texture("img/player/player_16_down.png"));
我跟着the libgdx wiki创建了jar。 assets文件夹包含在构建路径中,assets文件夹的内容位于导出的jar中:
我也尝试使用Gdx.files.internal
(同样,删除最终)
private final Sprite player_down = new Sprite(new Texture(Gdx.files.internal("img/player/player_16_down.png")));
但没有区别。
我能够导出基本项目,当新的gradle项目作为可执行jar导入eclipse时存在(在执行jar时没有错误)。
我发现类似的问题有一个问题,资产文件夹没有包含在jar中,这似乎不是问题。
有什么想法吗?
答案 0 :(得分:0)
只需将您的资源文件夹的所有内容放在与jar相同的目录中。
答案 1 :(得分:0)
我加载的资产有点不同,我的可执行jar文件运行正常。这是我的资产类:
public abstract class Assets {
private static AssetManager asm = new AssetManager();
private static String assetsPackPath = "assets.pack";
public static TextureAtlas atlas;
public static void load(){
asm.load(assetsPackPath, TextureAtlas.class);
asm.finishLoading();
atlas = asm.get(assetsPackPath);
}
public static void dispose(){
asm.dispose();
}
}
如果您不使用纹理包装机,那么您应该这样做!如有兴趣,请查看HERE
答案 2 :(得分:0)
我遇到过你前一段时间的问题。我也使用Eclipse来生成我的jar文件,无论我做什么,当我运行jar文件时都找不到文件。
解决方案:
首先在命令行中导航到项目目录。
运行命令gradlew desktop:dist
。
生成的jar文件可以在desktop/build/libs
。
注意:我发现的另一个问题是,当您在Eclipse中运行项目时,它对文件扩展名不区分大小写。这意味着在Eclipse中,一个项目在代码中加载文件img.png
,但实际上是img.PNG
,您将不会收到错误。 但是,运行jar文件时会出现错误。
我希望这个答案对您有所帮助,如果您有任何其他问题,请随时在下面发表评论!