我的可执行文件.jar文件不会写一个保存文件

时间:2014-07-02 19:33:45

标签: java jar executable objectoutputstream

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

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

see below for full code

请注意文件夹,四开关和保存文件已创建,但保存文件本身不是。

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

see below for full code

这与权限有关吗?


编辑:把它放在cmd中,当我试图保存时没有异常。将java.policy文件添加到jar所在的文件夹中,没有区别。我有一个以前保存的文件并将其放在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(); 
    }
}   
}
编辑2:我很感谢你所有的帮助,但我刚刚意识到我犯了一个非常愚蠢的错误......其他{return;}并没有按照我的教导去做,而是可以完全删除。 对不起,对不起!

无论如何都要关闭这个问题,还是应该让它坐下来?

1 个答案:

答案 0 :(得分:0)

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

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

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