按下JButton时,将文件中的数字设置为0

时间:2013-05-01 13:09:18

标签: java swing nullpointerexception jbutton fileoutputstream

在我的游戏的开始菜单中,我不想这样做,以便当您按下“继续”按钮时,您将获得上次玩游戏时的分数。我已经修复了保存分数的代码和加载分数的代码,因此继续按钮没有任何问题。

但是对于“新游戏”按钮,我遇到了一些困难。当按下该按钮时,我需要使存储分数的文件重置(将其中的数字设置为0而不是最后一个分数)。我试图将此代码放在ActionListener内的按钮中,但它不会将.dat文件中的文本设置为0,但它会在结尾添加0。

    try{
        String zero = "0";
        byte[] reset = zero.getBytes();
        player.getFile().write(reset);
    }catch (IOException ex){

    }

我也试过player.setScore("0");,每次敌人死亡时我用它来增加10分,但是它仍会从.dat文件中得到分数。

这是播放器类中的两个方法,它负责加载和保存文件。

    public void save(){
        try{
            getScore = new File("Score.dat");
            scoreFile = new FileOutputStream(getScore);
            byte[] saveScore = score.getBytes();
            scoreFile.write(saveScore);
        }catch(FileNotFoundException ex){

        }catch(IOException ex){

        }
    }

    public void load(){
        try{
            br = new BufferedReader(new FileReader("Score.dat"));
            score = br.readLine();
        }catch (FileNotFoundException ex){

        }catch(IOException ex){

        }
    }

如果按“继续”按钮而不是“新游戏”按钮,我也尝试仅运行load()方法,但我收到java.lang.NullPointerException错误。

2 个答案:

答案 0 :(得分:2)

您的代码隐藏了所有相关的异常,这将使得很难弄清楚发生了什么 - 在catch块中添加ex.printStackTrace();之类的内容,以便您可以查看是否抛出了异常。我想在你的情况下,字节没有被写入,因为你没有关闭或刷新流。

无论如何,您可能希望使用类似PrintWriter的内容而不是写入原始字节:

PrintWriter writer = new PrintWriter(new File("file.txt"));
writer.println("0");
writer.close();

答案 1 :(得分:0)

如果getFile()返回FileWriter,那么您可能每次都必须关闭并重新打开该文件,并使用constructor来表明您不希望它追加其他数据。