2013-05-01 2 views
1

В стартовом меню для моей игры я не сделаю так, чтобы, когда вы нажимаете кнопку «Продолжить», вы получаете оценку, которую вы имели в последний раз, когда вы играли , Я уже исправил код, который сохраняет оценку и код, который загружает счет, поэтому никаких проблем с кнопкой продолжения нет.Установка номера в файле до 0 при нажатии кнопки JButton

Но для кнопки «Новая игра» у меня возникают некоторые трудности. Когда эта кнопка нажата, мне нужно сделать файл, в котором хранится сброс очков (установите число внутри него на 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

Ваш код скрывает все соответствующие исключения, из-за чего очень сложно понять, что происходит - поместите что-то вроде ex.printStackTrace(); в блоки catch, чтобы вы могли увидеть, выбрасываются ли исключения. Я бы предположил, что в вашем случае байты не записываются, потому что вы не закрываете или не смываете поток.

Несмотря на это, вы, вероятно, хотите использовать что-то вроде PrintWriter с файлом вместо этого, а не написание необработанных байтов:

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

Использование 'PrintWriter' не остановит его при добавлении данных каждый раз, не так ли? –

+0

@RobI Он будет - по умолчанию PrintWriter перезапишет файл, а не добавит его. – berry120

0

Если getFile() возвращает FileWriter, то вы, вероятно, придется закрыть и снова открыть файл каждый и используйте constructor, который позволяет указать, что вы НЕ хотите добавлять дополнительные данные.

Смежные вопросы