【问题标题】:Java console APIJava 控制台 API
【发布时间】:2024-01-22 13:13:01
【问题描述】:

我使用 Eclipse 尝试了 java.io.Console API。下面是我的示例代码。

package app;

import java.io.Console;

public class MainClass {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Console console = System.console(); 
        console.printf("Hello, world!!");
    }

}

当我尝试运行示例时,出现以下错误。

线程“main”中的异常 java.lang.NullPointerException 在 app.MainClass.main(MainClass.java:11)

我哪里做错了?谢谢。

【问题讨论】:

    标签: java console


    【解决方案1】:

    由于您在评论中提到您正在使用 Eclipse,根据此bug report,目前似乎在 Eclipse 中不支持 Console

    System.console方法返回一个与当前Java虚拟机关联的控制台,如果没有控制台,则返回null。来自System.console 方法的文档:

    返回与当前 Java 关联的唯一 Console 对象 虚拟机,如果有的话。

    返回:

    系统控制台,如果有的话,否则null

    不幸的是,这是正确的行为。您的代码中没有错误。唯一可以做的改进是对Console 对象执行null 检查以查看是否已返回某些内容;这将通过尝试使用不存在的Console 对象来阻止NullPointerException

    例如:

    Console c = System.console();
    
    if (c == null) {
        System.out.println("No console available");
    } else {
        // Use the returned Console.
    }
    

    【讨论】:

    • 只是一个挑剔,但我会使用 System.err.println 而不是 System.out.println
    【解决方案2】:

    System.console 如果您不在控制台中运行应用程序,则返回 null。请参阅this question 获取建议。

    【讨论】:

    • 如何解决这个问题?我是否必须在命令行中运行应用程序而不使用 Eclipse 中的 RUN 按钮?
    • 我用一个类似问题的链接更新了答案 - 您可以使用外部控制台、批处理文件和/或远程调试来解决它。在 Eclipse 错误数据库中还有一个指向该问题的链接。
    【解决方案3】:

    System.console 返回唯一的 Console 对象 与当前 Java 相关联 虚拟机,如果有的话。

    您必须在使用前测试控制台是否为空。

    【讨论】: