Я пишу графический интерфейс для тральщика и сохраняю сложность в текстовом файле.Однако вместо того, чтобы писать в файл трудности должным образом, он всегда очищает файл, и мое условие проверки нуля срабатывает.
Я попытался использовать отладку и вручную отредактировать текстовый файл, чтобы он содержал строку «HARD», но послеизменяя сложность (снова устанавливая ее на жесткую, или переключаясь на легкую), файл становится пустым.
public class MineSweeperMain extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
String difficulty;
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader("LastProgramState.txt"));
difficulty = br.readLine();
if (difficulty == null) {
System.out.println("???");
throw new FileNotFoundException(); // If I comment this out, file becomes empty
}
} catch (FileNotFoundException e) {
BufferedWriter bw = new BufferedWriter(new FileWriter("LastProgramState.txt"));
bw.write("EASY");
bw.close();
difficulty = "EASY";
} finally {
if (br != null)
br.close();
}
int xSize;
int ySize;
int bombCount;
System.out.println(difficulty);
if (difficulty == null) {
System.exit(200);
}
if (difficulty.equals("HARD")) {
xSize = 16;
ySize = 16;
bombCount = 40;
}
else {
xSize = 9;
ySize = 9;
bombCount = 10;
}
Menu menu1 = new Menu("Options");
Menu menu2 = new Menu("Help");
MenuItem mi1 = new MenuItem("Difficulty: Easy");
MenuItem mi2 = new MenuItem("Difficulty: Hard");
MenuItem mi3 = new MenuItem("How to play");
MenuItem mi4 = new MenuItem("About...");
menu1.getItems().add(mi1);
menu1.getItems().add(mi2);
menu2.getItems().add(mi3);
menu2.getItems().add(mi4);
MenuBar bar = new MenuBar();
bar.getMenus().addAll(menu1,menu2);
Label score = new Label("Score:");
Scene scene = new Scene(bp);
primaryStage.setScene(scene);
primaryStage.setTitle("MineSweeper");
primaryStage.show();
}
mi1.setOnAction(event -> { //EASY
try {
BufferedWriter bwriter = new BufferedWriter(new FileWriter("LastProgramState.txt"));
bwriter.write("EASY");
} catch (IOException e) {
System.exit(100);
}
primaryStage.close();
Platform.runLater( () -> { //RUN APPLICATION AGAIN
try {
new MineSweeperMain().start( new Stage() );
} catch (Exception ex) {
System.exit(100);
}
} );
});
mi2.setOnAction(event -> { //HARD
try {
BufferedWriter bwriter = new BufferedWriter(new FileWriter("LastProgramState.txt"));
bwriter.write("HARD");
} catch (IOException e) {
System.exit(100);
}
primaryStage.close();
Platform.runLater( () -> {
try {
new MineSweeperMain().start( new Stage() );
} catch (Exception ex) {
System.exit(100);
}
} );
});
}
Если я выберу сложную сложность, я ожидаю, что в текстовом файле будет содержаться строка «HARD», новместо этого он содержит строку «EASY».Такое же поведение происходит, когда я выбираю легкую сложность.Также я заметил, что если я удаляю бросок new FileNotFoundException (), файл становится полностью пустым.Что я делаю неправильно?Любая помощь приветствуется.
РЕДАКТИРОВАТЬ: Проблема решена, я забыл закрыть файл после записи в в mi1.setOnAction()
и mi2.setOnAction()
.