You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 12:57:46