Skip to content

Commit

Permalink
Fixes JChess don't start when engines.json was invalid JSon
Browse files Browse the repository at this point in the history
  • Loading branch information
fathzer committed Mar 1, 2024
1 parent 275787d commit 7f1fa74
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 3 deletions.
13 changes: 11 additions & 2 deletions src/main/java/com/fathzer/jchess/bot/uci/EngineLoader.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import java.util.List;
import java.util.Set;

import org.json.JSONException;
import org.json.JSONObject;

import com.fathzer.jchess.bot.Engine;
Expand Down Expand Up @@ -46,7 +47,7 @@ public static void init() throws IOException {
} else {
EngineData[] dummy;
try {
dummy = TinyJackson.toArray(new JSONObject(Files.readString(PATH)).getJSONArray("engines"), EngineData.class);
dummy = readExternalEnginesData();
} catch (IOException e) {
dummy = new EngineData[0];
error = e;
Expand All @@ -57,10 +58,18 @@ public static void init() throws IOException {
deDuplicateNames(array);
}
data = Arrays.asList(array);
Runtime.getRuntime().addShutdownHook(new Thread(()-> shutdown()));
if (error!=null) {
throw error;
}
Runtime.getRuntime().addShutdownHook(new Thread(()-> shutdown()));
}

private static EngineData[] readExternalEnginesData() throws IOException {
try {
return TinyJackson.toArray(new JSONObject(Files.readString(PATH)).getJSONArray("engines"), EngineData.class);
} catch (JSONException e) {
throw new IOException(e);
}
}

private static void deDuplicateNames(EngineData[] engines) {
Expand Down
4 changes: 3 additions & 1 deletion src/main/java/com/fathzer/jchess/swing/JChess.java
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,9 @@ protected boolean onStart() {
int result = JOptionPane.showConfirmDialog(null,"An error occured while reading the external engine configuration file (data/engines.json).\nWould you like to quit now?", "Engine configuration error",
JOptionPane.YES_NO_OPTION,
JOptionPane.ERROR_MESSAGE);
return result!=0;
if (result==0) {
return false;
}
}
fixSettings();
this.game = new GameSession(panel.getGamePanel(), settings);
Expand Down

0 comments on commit 7f1fa74

Please sign in to comment.