Java Console.readLine()报NullPointerException无法输入问题求解
问题产生原因
空指针的根源是System.console()返回了null,和你调用readLine()的语法无关。java.io.Console类只能在程序绑定了原生系统控制台的场景下才能正常获取实例,如果你是在IDE(IntelliJ IDEA、Eclipse、VS Code Java插件等)的内置运行环境中启动程序,IDE会将JVM的输入输出重定向到自己的输出窗口,不会分配原生系统控制台,此时System.console()就会返回null,后续直接调用c.readLine()就会触发你看到的空指针异常。
修复方案
你可以二选一:
- 方案1:保留现有Console写法,不在IDE内置运行器中启动程序。打开系统终端(CMD、PowerShell、macOS/Linux终端),进入编译生成的
Ejercicio3.class所在目录,执行java Ejercicio3命令启动程序即可正常获取输入。
建议在获取Console实例后增加非空判断,避免直接抛出空指针:Console c = System.console(); if (c == null) { System.out.println("当前运行环境无可用系统控制台,请在系统终端启动程序,或改用Scanner实现输入"); System.exit(1); } - 方案2:替换为
Scanner类实现输入,这是兼容性更好的写法,不管是系统终端运行还是IDE内置运行都能正常工作,修改后的完整代码如下:import java.util.Scanner; public class Ejercicio3 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("¿Cuántas puertas quieres que tenga el coche?"); String numPuertas = sc.nextLine(); sc.close(); int numNum = Integer.parseInt(numPuertas); if (numNum == 3) { System.out.println("Es un coche deportivo"); } else if (numNum == 5) { System.out.println("Es un coche familiar"); } else { System.out.println("¿Seguro que el coche tiene " + numNum + " puertas?"); } } }
内容的提问来源于stack exchange,提问作者Javier López
相关产品推荐
相关产品推荐

