1

このような問題はどこにも見つかりませんでした。

私はそのような結果を持っています:

Wed Jun 26 09:30:02 CEST 2013 INFO:Slick Build #237
Wed Jun 26 09:30:02 CEST 2013 INFO:LWJGL Version: 2.9.0
Wed Jun 26 09:30:02 CEST 2013 INFO:OriginalDisplayMode: 1366 x 768 x 32 @60Hz
Wed Jun 26 09:30:02 CEST 2013 INFO:TargetDisplayMode: 640 x 480 x 0 @0Hz
Wed Jun 26 09:30:02 CEST 2013 INFO:Starting display 640x480
Wed Jun 26 09:30:02 CEST 2013 INFO:Use Java PNG Loader = true
WARNING: Found unknown Windows version: Windows 7
Attempting to use default windows plug-in.
Loading: net.java.games.input.DirectAndRawInputEnvironmentPlugin
Wed Jun 26 09:30:02 CEST 2013 INFO:Found 0 controllers
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
    at java.lang.String.substring(Unknown Source)
    at org.newdawn.slick.tiled.TiledMap.<init>(TiledMap.java:106)
    at org.newdawn.slick.tiled.TiledMap.<init>(TiledMap.java:90)
    at SlickTest.init(SlickTest.java:24)
    at org.newdawn.slick.AppGameContainer.setup(AppGameContainer.java:393)
    at org.newdawn.slick.AppGameContainer.start(AppGameContainer.java:317)
    at SlickTest.main(SlickTest.java:45)

そのようなコードの場合:

import java.util.logging.Level;
import java.util.logging.Logger;

import org.newdawn.slick.AppGameContainer;
import org.newdawn.slick.BasicGame;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.Image;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.tiled.TiledMap;

public class SlickTest extends BasicGame{
     Image celownik;
     private TiledMap grassMap = null;
    public SlickTest(String title) {
        super("Graaa");
        // TODO Auto-generated constructor stub
    }

    @Override
    public void init(GameContainer gc) throws SlickException {
        //celownik = new Image("cross.png");

        grassMap = new TiledMap("mapa.tmx");  // << this is the problem


    }

    @Override
    public void update(GameContainer gc, int i) throws SlickException {
    }

    @Override
    public void render(GameContainer gc, Graphics g) throws SlickException {
    //grassMap.render(0, 0);
        //g.drawString("r", 20,20);
        //g.drawImage(celownik, 50,50);
    }

    public static void main(String[] args) {
        try {
            AppGameContainer appgc;
            appgc = new AppGameContainer(new SlickTest("Simple Slick Game"));
            appgc.setDisplayMode(640, 480, false);
            appgc.start();
        } catch (SlickException ex) {
            Logger.getLogger(SlickTest.class.getName()).log(Level.SEVERE, null, ex);
        }

    }
}

Base64 gzip 圧縮を使用しているため、すべて問題ありません。私は病気になる要因を見つけることができません;)。この例外は、不適切なライブラリの配置の結果である可能性はありますか?

4

1 に答える 1

0

クラスのソースを調べると、TiledMapコンストラクター内に次のようなコードがあることがわかります。

ref = ref.replace('\\', '/');                
load(ResourceLoader.getResourceAsStream(ref),
                                ref.substring(0, ref.lastIndexOf("/")));

つまり、ref引数はファイルへのパスである必要があり、少なくとも 1 つのパス区切り記号が含まれている必要があります。それがなければ、ref.substring(0, ref.lastIndexOf("/"))明らかにStringIndexOutOfBoundsException.

于 2013-06-26T07:53:34.303 に答える