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)时,没有测试会通过。我去eclipse,我可以看到当我尝试加载游戏时,它会抛出Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException.

我试过把这条线改成URL fileWithData=getClass().getResource("./save.xml");URL fileWithData=getClass().getResource("save.xml");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 回答