Java 我的可执行.jar文件赢了';不要写保存文件

Java 我的可执行.jar文件赢了';不要写保存文件,java,jar,executable,objectoutputstream,Java,Jar,Executable,Objectoutputstream,我正在为学校作业制作一个游戏,游戏的一个特点是可以保存和加载。在eclipse中,一切都正常工作,但在将其设置为可执行jar之后,它不会在指定位置创建文件 我正在使用此代码将其保存到我想要的文件夹中: see below for full code 请注意,创建了文件夹quarto&savefiles,但未创建保存文件本身 我正在使用以下代码将对象写入.sav文件: see below for full code 这与权限有关吗 编辑:在cmd中运行,当我试图保存时没有异常。在jar所在的

我正在为学校作业制作一个游戏,游戏的一个特点是可以保存和加载。在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(); 
    }
}   
}
我很感谢你的帮助,但我刚刚意识到我犯了一个非常愚蠢的错误。。。否则{return;}不会像我教的那样做,它会被完全删除。 抱歉给你添麻烦了

是否有任何方法可以将这个问题标记为已结束,还是我应该让它停止?

Java程序(尤其是小程序)往往需要权限来执行读写文件之类的操作。这就是为什么会有
.policy
文件。将名为
java.policy
的文件添加到与jar相同的目录中。在文件中,您必须授予权限。因此,请将其放入.policy文件:

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

这将授予所有权限,例如.jar。

它可能与权限有关。运行代码时有错误消息吗?此外,我们可能需要看到更多的代码。我假设savename字段有效?我将验证第二个代码块中的表达式
folder+File.separator+savename
是否生成了所需的字符串。如果您没有看到异常,那么文件可能正在创建中,而不是您期望的位置。请记住,“user.home”在jar中可能不同。我建议您输出
System.out.println(System.getProperty(“user.home”))
somewhere,您一定在某个地方忽略了异常。检查并报告。我将该文件添加到.jar所在的文件夹中。尝试保存时没有更改。顺便说一句,这是最后一次吗;应该在那里?据我所知是的。我很少这样做,我只做过一次,这对我很有效。如果您在Windows中,还可以从控制面板配置java。