如何使用Slick2d加载tmx文件?

我刚开始使用Slick2D,学习了如何加载一个地图并显示它。 我尝试了大量示例中的至less十几个不同的tmx文件,以查看它是否是已损坏的实际文件。 每次我得到这个错误:

Exception in thread "main" java.lang.RuntimeException: Resource not found: data/maps/desert.tmx at org.newdawn.slick.util.ResourceLoader.getResourceAsStream(ResourceLoader.java:69) at org.newdawn.slick.tiled.TiledMap.<init>(TiledMap.java:101) at game.Game.init(Game.java:17) at game.Tunneler.initStatesList(Tunneler.java:37) at org.newdawn.slick.state.StateBasedGame.init(StateBasedGame.java:164) at org.newdawn.slick.AppGameContainer.setup(AppGameContainer.java:390) at org.newdawn.slick.AppGameContainer.start(AppGameContainer.java:314) at game.Tunneler.main(Tunneler.java:29) 

这是我的游戏类:

 package game; import org.newdawn.slick.GameContainer; import org.newdawn.slick.Graphics; import org.newdawn.slick.SlickException; import org.newdawn.slick.state.BasicGameState; import org.newdawn.slick.state.StateBasedGame; import org.newdawn.slick.tiled.TiledMap; public class Game extends BasicGameState{ private int stateID = -1; private TiledMap map = null; public Game(int stateID){ this.stateID = stateID; } public void init(GameContainer container, StateBasedGame game) throws SlickException{ map = new TiledMap("data/maps/desert.tmx","maps");//ERROR } public void render(GameContainer container, StateBasedGame game, Graphics g) throws SlickException{ //map.render(0,0); } public void update(GameContainer container, StateBasedGame game, int delta) throws SlickException{ } public int getID(){return stateID;} } 

我试图看看是否有其他人有类似的问题,但没有发现任何东西。 我能够加载其他文件,所以我不相信这是一个编译器问题。 我的菜单类可以加载图像,并显示它们就好了。 另外,文件path是正确的。

请让我知道,如果你有任何可能帮助我解决这个问题的指针。

这个答案从我对原始问题的评论中得到巩固。

我曾经使用过几次相同的构造函数加载地图。 这个exception的错误信息,让我相信它根本找不到这个文件。

由于您的评论声明,您可以加载其他资源(图像和声音),但不是这张地图,这是一个更强有力的迹象,这是事实。 在Slick2D图像中,Sounds,TiledMaps等都使用相同的方法(ResourceLoader.getResourceAsStream方法)加载。

在创建地图文件之后,您是否在Eclipse中刷新项目? 你能在Eclipse中看到地图文件吗? 确保在项目本身上执行层次结构顶部的刷新操作。 (右键单击该项目并使用刷新。)如果不起作用,请尝试重新创建该项目。 (我从来没有必要这样做。)

我有类似的问题。 但已经想出了如何确保它会加载。 你要做的第一件事就是像这样创建TiledMap对象

 public TiledMap map = null; 

现在你只需要告诉它不要加载地图集,除非你想要,但在我的游戏中,我已经加载了不同的地图集

 public void load(){ map = new TiledMap("filepath", false); } 

右键单击给你错误信息的Java应用程序。 转到> RUN CONFIGURATION。 看一看主线。 主类应该是你的主类方法的类。 如果没有,请查看左侧面板,find调用您的Java应用程序的主类。 点击它,并确保它被设置为MAIN CLASS行中的主类。