1

私はそれが以前に尋ねられて答えられたことを知っています、しかし私はそれをうまく動かすことができません。

したがって、私のファイル階層は次のとおりです。

+ Project
  + build.xml
  + save.xml
  + src
  + build

特定の瞬間にゲームの状態を保存するための「保存」ファイルがあります。上書きしやすく、読みやすく、ゲームにすべてを再度ロードできる必要があります。

私のsave()はこのようなもので、機能しているようです。

 public void save(Game game) throws IOException{
    Document doc = DocumentHelper.createDocument();
    doc.add(game.save());
    File save=null;
    save = new File("./save.xml");

    FileWriter writer = new FileWriter(save);
    doc.write( writer);
    writer.close();
}

game.save()は、私がやりたいことを実際に実行するゲームのメソッドです。それは再帰的にそしてすべてを行います、そして私は別のプログラムでXMLファイルを開いたのでそれがうまくいくことを知っています。

だから、私の問題はここから始まります。私のgetinfofromxml()メソッドは次のとおりです。

public Game getinfofromxml() throws IOException{
    Game game;
    SAXReader reader = new SAXReader();
    try{
        URL fileWithData=getClass().getResource("./save.xml");
        Document document = reader.read(fileWithData);
        Element alreadySavedGame= document.getRootElement();
        game= getGameSaved(alreadySavedGame);
    }catch(DocumentException ex){
        throw new IOException();
    }
    return game;
} 

私の問題は、(antを介して)実行しようとすると、テストに合格しないことです。私は日食に行きます、そして私がゲームをロードしようとすると、それがスローするのを見ることができますException in thread "AWT-EventQueue-0" java.lang.NullPointerException

URL fileWithData=getClass().getResource("./save.xml");行をURL fileWithData=getClass().getResource("save.xml");andなどに変更してみましたURL fileWithData=getClass().getResource("../save.xml");が、いつも同じです。

何か案が?

読んでくれてありがとう

4

1 に答える 1

1

したがって、getResource()を使用すると、そのクラスのロードに使用されたクラスローダーを使用してファイルを検索しようとします。これは(少なくとも後で)アプリがパッケージ化されているjarファイルである可能性があり、そこからセーブゲームをロードしようとしているとは思いません:)

保存するのと同じ方法でファイルをロードします。

URL fileWithData= new File( "save.xml" ).toURI().toURL(); 

(追加の例外をキャッチする必要がある場合があります)

于 2012-07-17T23:34:54.420 に答える