【问题标题】:My executable .jar file won't write a save file我的可执行 .jar 文件不会写入保存文件
【发布时间】:2014-08-23 17:50:30
【问题描述】:

我正在为学校作业制作游戏,其中一个功能是可以保存和加载游戏。虽然在 Eclipse 中一切正常,但在将其设为可执行 jar 后,它不会在指定位置创建文件。

我正在使用此代码将其保存在我想要的文件夹中:

see below for full code

请注意,文件夹 quarto 和 savefiles 已创建,但保存文件本身并未创建。

我正在使用此代码将对象写入 .sav 文件:

see below for full code

这和权限有关吗?


编辑:在 cmd 中运行它,当我尝试保存时没有例外。在 jar 所在的文件夹中添加了一个 java.policy 文件,没有区别。我得到了一个以前保存的文件并将其放在 quarto/savefiles 映射中,因为我想看看它是否正确加载(这也使用 user.home 进入正确的文件夹)。它正确加载。我还搜索了 savename.sav 以查看它是否将其保存在其他地方,没有找到任何东西。

全班:

package quarto;

import java.io.File;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;

public class TaskSpelOpslaan extends SpelGegevens{


public static void runSpelOpslaan() {

    String savename = SpelOpslaanScherm.getSaveName();
    String userHome = System.getProperty("user.home") + File.separator + "quarto" + File.separator + "savefiles";
    String locatie = userHome;
    File folder = new File(locatie);
    if (!folder.exists()) {
       folder.mkdirs();
    }

    try{ 
        if(!savename.contains(".sav"))
        {
            savename = (savename+".sav");
        }
        else
        {
            return; 
        }
        FileOutputStream saveFile=new FileOutputStream(folder+File.separator + savename);

        ObjectOutputStream save = new ObjectOutputStream(saveFile);

        save.writeObject(bordInfo);
        save.writeObject(stukGeplaatst);
        save.writeObject(stukGeselecteerd);
        save.writeObject(spelerBeurt);
        save.writeObject(gekozenStuk);
        save.writeObject(bordImage);
        save.writeObject(stukImage);
        save.writeObject(naamSpeler1);
        save.writeObject(naamSpeler2);

        save.close(); 

    }
    catch(Exception exc){
        exc.printStackTrace(); 
    }
}   
}

EDIT2:我感谢您的所有帮助,但我刚刚意识到我犯了一个非常愚蠢的错误... else{return;} 没有按照我教的那样做,可以完全删除。 给您添麻烦了!

有没有办法将这个问题标记为已关闭,还是我应该让它坐下来?

【问题讨论】:

  • 这可能与权限有关。运行代码时有任何错误消息吗?此外,我们可能需要查看更多代码。我认为 savename 字段有效?
  • 我会验证第二个代码块中的表达式folder+File.separator+savename 是否生成了您期望的字符串。如果您没有看到异常,则可能正在创建文件,只是不在您期望的位置。
  • 请记住,jar 中的“user.home”可能不同。我建议你在某处输出System.out.println(System.getProperty("user.home"))
  • 你一定有一个你在某处忽略的异常。检查并报告。

标签: java jar executable objectoutputstream


【解决方案1】:

Java 程序(尤其是小程序)往往需要权限才能执行诸如读取和写入文件之类的操作。这就是为什么有.policy 文件的原因。将一个名为 java.policy 的文件添加到与 jar 相同的目录中。在文件中,您必须授予权限。所以把它放到 .policy 文件中:

grant CodeBase "Example.jar"
{
    permission java.security.AllPermission;
};

这将授予 Example.jar 的所有权限。

【讨论】:

  • 我将文件添加到 .jar 所在的文件夹中。当我尝试保存时没有任何变化。顺便说一句,是最后一个吗?应该在那里?
  • 据我所知是的。我很少这样做,我只做过一次,它对我有用。如果您在 Windows 中,还可以从控制面板配置 java。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-25
  • 2012-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-24
相关资源
最近更新 更多