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

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

see below for full code

请注意,创建了文件夹quarto和savefile,但没有创建保存文件。

我正在使用此代码将对象写入.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;}并没有按照我的教导去做,可以完全删除。
抱歉,添麻烦了!

无论如何,有没有将这个问题标记为已结束,还是我应该让它坐下来?

最佳答案

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

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

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

09-30 14:54
查看更多