JavaFX数独应用updateBoard方法调用异常问题排查
解决JavaFX数独应用中updateBoard()方法的NumberFormatException问题
咱们先直奔问题核心——你写的空值判断逻辑完全没起到作用!
看这行代码:
if ((Integer) Integer.parseInt(textFields[i][j].getText()) != null)
Integer.parseInt()方法如果传入空字符串"",会直接抛出NumberFormatException,根本走不到后面的!= null判断步骤。这就是为什么当TextField为空时,调用这个方法会报错。
那为什么在checkBoard()里调用没问题呢?大概率是因为checkBoard()执行时,所有TextField都被确保有合法数值(比如调用前做了输入校验,或者此时棋盘还没有空单元格);而点击保存按钮时,棋盘上存在空的TextField(对应数独的空白格子),这时候parseInt碰到空字符串就直接触发异常了。
修复方案
我们需要先判断TextField的内容是否为空,再决定要不要转换数值。修改后的updateBoard()方法如下:
public void updateBoard() { int index = 0; // 注意:如果index是局部变量必须初始化,成员变量也建议每次调用时重置 for (int i = 0; i < 9; i++) { for (int j = 0; j < 9; j++) { String input = textFields[i][j].getText().trim(); // 先去除首尾空格,避免空格误判 if (input.isEmpty()) { sudokuBoard.set(i, j, null); } else { try { int value = Integer.parseInt(input); sudokuBoard.set(i, j, value); } catch (NumberFormatException e) { // 处理非数字输入的情况,比如设为null或提示用户 sudokuBoard.set(i, j, null); // 可选:弹出提示告知输入无效 // Alert alert = new Alert(Alert.AlertType.WARNING, "单元格("+(i+1)+","+(j+1)+")输入无效,请输入1-9的数字"); // alert.showAndWait(); } } index++; } } }
额外说明
- 加上
trim()是为了处理用户只输入空格的情况,避免把空格误判为有效输入。 - 增加
try-catch块是为了兼容用户输入非数字的场景(比如字母、符号),防止程序直接崩溃。 - 注意
index变量的初始化问题,如果是局部变量必须手动初始化;如果是成员变量,建议每次调用updateBoard()时重置为0,避免累加导致逻辑错误。
这样修改后,无论是在checkBoard()还是保存按钮的方法里调用updateBoard(),都能正确处理空TextField的情况,不会再抛出异常啦。
内容的提问来源于stack exchange,提问作者Vader20FF
相关产品推荐
相关产品推荐

