eclipse中使用console报错java.lang.NullPointerException

最近博主想重新学习一下Java,其中在学习Console使用时发现了问题。代码如下,十分简单:

import java.io.Console;
public class InputOutput {
	public static void main(String[] args) {
		Console cons=System.console();
		String name=cons.readLine("username:");
		char[] pwd=cons.readPassword("password:");
		System.out.println("name"+name+"pwd"+pwd.toString());
	}
}

但是不可思议的是这么几行代码运行竟然会有问题,问题如下:
在这里插入图片描述出错代码如下:
String name=cons.readLine("username:");
也就是说这里出现了空指针,问题应该出现在cons这个对象上,打印发现cons果然为null:
eclipse中使用console报错java.lang.NullPointerException_第1张图片觉得事情不太对劲,去查看了下API手册:
eclipse中使用console报错java.lang.NullPointerException_第2张图片红框中的意思简单来说就是System.console()方法与虚拟机是否具有控制台有关系,如果有,那么就可以使用,没有则该方法返回null。

那么为什么eclipse上不可以运行呢?
因为eclipse将应用程序作为后台进程运行,而不是作为带有系统控制台的顶级进程运行。也就是说System.console()在eclipse的机制下只会返回null,而在IDEA环境下可以正常运行。

替代console的方法

public class ReadingDemo {

public static void main(String[] args) {

    // ====  BufferedReader
    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
    System.out.print("Please enter user name : ");
    String username = null;
    try {
        username = reader.readLine();
    } catch (IOException e) {
        e.printStackTrace();
    }
    System.out.println("You entered : " + username);
    // ===== In Java 5, Java.util,Scanner is used for this purpose.
    Scanner in = new Scanner(System.in);
    System.out.print("Please enter user name : ");
    username = in.nextLine();      
    System.out.println("You entered : " + username);
}
}

你可能感兴趣的:(eclipse中使用console报错java.lang.NullPointerException)