Java getText().trim().equals(null)空值判断条件不执行问题
故障原因
- 空判断逻辑从根上写错了:Swing的
JTextField文本框在无任何输入时,getText()返回的永远是空字符串"",不会返回null;即使用户只输入了空格,经过trim()处理后得到的也是空字符串,同样不是null。 - 对任何非null的对象调用
equals(null),返回值永远是false,所以你写的!Window.x.getText().trim().equals(null)判断永远成立,不管输入框有没有填内容都会直接进入条件1分支,尝试把空字符串转为整数,最终抛出数字格式异常。你写的条件2分支永远不可能被触发。 - 额外提醒:就算真要判断对象是否为null,也应该用
obj == null的写法,不要用obj.equals(null)——如果obj本身是null,调用equals方法会直接抛出空指针异常。 - 你的报错信息里已经明确写了
For input string: "",就是转整数时拿到了空字符串,和上面的逻辑完全对应。
修正后的实现代码
// 提前取出去除首尾空格的输入值,避免重复调用方法 String xInput = Window.x.getText().trim(); String yInput = Window.y.getText().trim(); // 输入都不为空时走解析逻辑 if (!xInput.isEmpty() && !yInput.isEmpty()) { try { x = Integer.parseInt(xInput); System.out.println("X - OK"); y = Integer.parseInt(yInput); System.out.println("Y - OK"); } catch (NumberFormatException e) { // 兜底处理用户输入非数字内容的场景 JOptionPane.showMessageDialog(null, "坐标值必须为有效整数", "ERROR", JOptionPane.ERROR_MESSAGE); return; } // 任意输入为空时走错误提示 } else { JOptionPane.showMessageDialog(null, "Please specify cursor coordinates(X, Y)", "ERROR", JOptionPane.ERROR_MESSAGE); return; }
修正说明:用字符串的
isEmpty()方法判断空内容才是符合Swing文本框返回值逻辑的写法,额外增加的数字格式异常捕获,可以避免用户输入字母、符号等非整数内容时程序直接崩溃,鲁棒性更强。
内容的提问来源于stack exchange,提问作者user18466361
相关产品推荐
相关产品推荐

