2013-05-01 4 views
1

내 게임의 시작 메뉴에서 "계속"버튼을 누르면 마지막으로 연주 한 점수를 얻지 못하게됩니다 . 계속 점수를 저장하는 코드와 점수를로드하는 코드를 수정하여 계속 버튼에 문제가 없는지 확인했습니다.JButton을 누를 때 파일 번호를 0으로 설정

하지만 "새로운 게임"버튼의 경우 약간의 어려움이 있습니다. 해당 버튼을 누르면 점수를 재설정 한 파일을 만들 필요가 있습니다 (마지막 점수 대신 0으로 설정). 단추에 대한 ActionListener 안에이 코드를 넣으려고했지만 .dat 파일 내부의 텍스트를 0으로 설정하지 않지만 끝에 0을 추가합니다.

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

    } 

나는 또한 내가 10 팀에게 적의가 죽었을 때마다 추가 할 수 있지만 그때는 여전히 .DAT 파일에서 점수를 얻을 것이다 사용 player.setScore("0");을 시도했습니다.

이것은 플레이어 클래스 내부에서 파일로드 및 저장을 처리하는 두 가지 방법입니다.

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){ 

     } 
    } 

나는 "계속"버튼이 아닌 "새로운 게임"버튼을하지만 내가 java.lang.NullPointerException 오류를 누르면 나는 또한 단지 load() 방법을 실행에 노력했다.

답변

2

코드에 관련된 모든 예외가 숨겨져있어 무슨 일이 일어나는지 파악하기가 어렵습니다. ex.printStackTrace();을 catch 블록에 넣으면 예외가 throw되는지 확인할 수 있습니다. 나는 당신의 경우 스트림을 닫거나 플러시하지 않기 때문에 바이트가 기록되지 않는다고 생각한다.

에 관계없이, 당신은 아마 대신, 오히려 쓰기 원시 바이트보다 파일과 PrintWriter 같은 것을 사용하려면 : getFile()이 그때는 아마 닫고 각 파일을 다시해야하는 FileWriter 반환

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

'PrintWriter '를 사용하면 매번 데이터를 추가 할 수 없습니다. –

+0

@RobI - 기본적으로 PrintWriter는 파일을 추가하지 않고 덮어 씁니다. – berry120

0

경우 추가 데이터를 추가하지 않도록 지정하는 constructor을 사용하십시오.

관련 문제