Way to Reproduce: 1. Run Main.java inside the folder Default 2. Input "1" in the console for choosing Solver mode 3. Input "1" in the console for choosing game level Actual Result: Exception in thread "main" java.lang.Error: Unresolved compilation problem: Unhandled exception type IOException at Puzzle.Puzzle.<init>(Puzzle.java:64) at Puzzle.UI.SolverModeController.<init>(SolverModeController.java:14) at Puzzle.UI.SolverMode.<init>(SolverMode.java:31) at Puzzle.UI.GameFlowFactory.getGameFlow(GameFlowFactory.java:6) at Puzzle.UI.Main.main(Main.java:34) at Default.Main.main(Main.java:5) Expect Result: No error is shown
Bug is confirmed
Inside Puzzle.java, Puzzle constructor should surround with "try and catch" to prevent the error shown. Modification of code: public Puzzle(String path) { JSONObject jsonObj = null; try { Path file = Path.of(path); String obj = Files.readString(file); jsonObj = new JSONObject(obj); // store the JSON obj, for other classes to access this.puzzleJSON = jsonObj; name = (String)jsonObj.get("PuzzleName"); description = (String) jsonObj.get("Description"); roleList = jsonArray2arrayList((JSONArray) jsonObj.get("Roles")); JSONArray jsonArray; jsonArray = (JSONArray) jsonObj.get("InitialState"); initialState = new PuzzleState(jsonArray2arrayList((JSONArray) jsonArray.get(0)), jsonArray2arrayList((JSONArray) jsonArray.get(1)), 0); jsonArray = (JSONArray) jsonObj.get("TargetState"); targetState = new PuzzleState(jsonArray2arrayList((JSONArray) jsonArray.get(0)), jsonArray2arrayList((JSONArray) jsonArray.get(1)), 0); travelables = new HashSet<String>(jsonArray2arrayList((JSONArray) jsonObj.get("Travelable"))); } catch (Exception e) { System.out.println(e.getMessage()); } }