我知道之前已被问过并回答过,但我无法让它发挥作用。
所以,我的文件层次结构是:
+ Project
+ build.xml
+ save.xml
+ src
+ build
我有“保存”文件来保存给定时刻的游戏状态。它应该很容易覆盖并且易于阅读以在游戏中再次加载所有内容。
我的保存()就像这样,它似乎正在起作用:
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");
和URL fileWithData=getClass().getResource("../save.xml");
以及类似的内容,但它总是相同。
有什么想法吗?
感谢您阅读
答案 0 :(得分:1)
因此,如果您使用getResource(),它将尝试使用用于加载该类的类加载器来查找您的文件。这可能是(至少后来)你的应用程序打包的jar文件,我不认为你是在尝试从那里加载你的存档游戏:)
我将以与保存文件相同的方式加载文件:
URL fileWithData= new File( "save.xml" ).toURI().toURL();
(你可能需要抓住一个额外的例外)