java中的Console类在读取密码时的异常

时间:2011-03-11 16:07:14

标签: java

我正在尝试在java中使用Console类。使用此代码

import java.io.Console;
public class ConsoleClass {
public static void main(String[] args){
    Console c=System.console();
    char[] pw;
    pw=c.readPassword("%s","pw :");
    for(char ch:pw){
        c.format("%c",ch);
    }
    c.format("\n");
    MyUtility mu =new MyUtility();
    while(true){
        String name=c.readLine("%s", "input?: ");
        c.format("output: %s \n",mu.doStuff(name));

    }

  } 
}
class MyUtility{
String doStuff(String arg1){
    return "result is " +arg1;
}
}

这里我得到NullPointerException当我试图在netbeans中运行但是当我尝试在没有netbeans IDE的cmd中运行时我没有得到任何异常。为什么?

3 个答案:

答案 0 :(得分:4)

static Console console() Returns the unique Console object associated with the current Java virtual machine, if any.

如果有的话。

  

http://download.oracle.com/javase/6/docs/api/java/lang/System.html

答案 1 :(得分:1)

控制台通常与独立于框架运行的进程相关联。它们是将进程的标准输入和输出与shell连接的一种方法。如果您的类作为更大框架的组件运行,那么框架可能拥有控制台,并且您的程序可能根本没有控制台。

在没有控制台的情况下启动程序还有其他条件和技术。它们通常在保证发生控制台破坏的情况下使用,但是您希望程序分离,以致控制台的破坏不会发出程序终止的信号。

因此,您无法保证控制台的存在;但是,如果您要在可能存在控制台的环境中运行程序,则应该利用它。

答案 2 :(得分:0)

System.console()会返回Console个实例if a console is associated with the process。 - 在NetBeans下运行,您可能没有关联的控制台。