summaryrefslogtreecommitdiffstats
path: root/src/se
diff options
context:
space:
mode:
authorGustav Sörnäs <gustav@sornas.net>2021-03-02 09:49:47 +0100
committerGustav Sörnäs <gustav@sornas.net>2021-03-02 09:49:47 +0100
commit918017906477fba95334a8581d23509e28d8274c (patch)
tree81376930a9d24e685723fedc290257bbed3293fc /src/se
parent179d02c9d6cad1397de52418407a631472735e03 (diff)
downloadtdde30-918017906477fba95334a8581d23509e28d8274c.tar.gz
error handling
Diffstat (limited to 'src/se')
-rw-r--r--src/se/liu/gusso230/tetris/Board.java30
-rw-r--r--src/se/liu/gusso230/tetris/HighscoreList.java14
2 files changed, 35 insertions, 9 deletions
diff --git a/src/se/liu/gusso230/tetris/Board.java b/src/se/liu/gusso230/tetris/Board.java
index bb84d2a..311d736 100644
--- a/src/se/liu/gusso230/tetris/Board.java
+++ b/src/se/liu/gusso230/tetris/Board.java
@@ -4,6 +4,7 @@ import com.google.gson.Gson;
import javax.swing.*;
import java.io.File;
+import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
@@ -46,7 +47,7 @@ public class Board {
tetrominoMaker = new TetrominoMaker();
this.highscores = highscores;
highscoreFile = new File("highscores.json");
- highscores.readFromFile(highscoreFile);
+ readHighscores();
// highscores.addHighscore(new Highscore("a", 100));
// highscores.addHighscore(new Highscore("c", 300));
// highscores.addHighscore(new Highscore("b", 200));
@@ -64,12 +65,37 @@ public class Board {
}
}
+ private void readHighscores() {
+ // file is written and created on game over, so no error
+ try {
+ highscores.readFromFile(highscoreFile);
+ } catch (FileNotFoundException ignored) {}
+ }
+
+ private void writeHighscores() {
+ while (true) {
+ try {
+ highscores.saveToFile(highscoreFile);
+ return;
+ } catch (FileNotFoundException | SecurityException ignored) {
+ if (JOptionPane.showConfirmDialog(null,
+ "Couldn't write highscore file. Try again?",
+ "",
+ JOptionPane.YES_NO_OPTION)
+ == JOptionPane.NO_OPTION)
+ {
+ return;
+ }
+ }
+ }
+ }
+
private void gameOver() {
state = GameState.GAME_OVER;
//highscores.addHighscore(new Highscore(JOptionPane.showInputDialog("Your name: "), points));
highscores.addHighscore(new Highscore("woo", points));
highscores.sort(new HighscoreComparator());
- highscores.saveToFile(highscoreFile);
+ writeHighscores();
state = GameState.SHOWING_HIGHSCORES;
}
diff --git a/src/se/liu/gusso230/tetris/HighscoreList.java b/src/se/liu/gusso230/tetris/HighscoreList.java
index 0a99db0..3ae14f9 100644
--- a/src/se/liu/gusso230/tetris/HighscoreList.java
+++ b/src/se/liu/gusso230/tetris/HighscoreList.java
@@ -8,6 +8,7 @@ import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
+import java.util.NoSuchElementException;
import java.util.Scanner;
public class HighscoreList {
@@ -21,18 +22,17 @@ public class HighscoreList {
highscores.add(highscore);
}
- public void saveToFile(File file) {
+ public void saveToFile(File file) throws FileNotFoundException, SecurityException {
try (PrintWriter writer = new PrintWriter(file)) {
Gson gson = new Gson();
writer.println(gson.toJson(this));
- } catch (FileNotFoundException ignored) {}
+ }
}
- public void readFromFile(File file) {
- try (Scanner sc = new Scanner(file)) {
- Gson gson = new Gson();
- highscores = gson.fromJson(sc.nextLine(), getClass()).getHighscores();
- } catch (FileNotFoundException ignored) {}
+ public void readFromFile(File file) throws FileNotFoundException, NoSuchElementException {
+ Scanner sc = new Scanner(file);
+ Gson gson = new Gson();
+ highscores = gson.fromJson(sc.nextLine(), getClass()).getHighscores();
}
public List<Highscore> getHighscores() {