在java中从Console读取密码

时间:2013-08-13 01:41:48

标签: java java-io

我想在我的java程序中从控制台读取密码。我用了

 Console newConsole = System.console();

但是我可以在我的班级中声明和初始化控制台对象。 我收到一条错误消息

" the method console() is undefined for the type System" and " Console cannot be resolved or is not a type"

因此我认为我没有最新的java版本并使用

检查了我的java版本
C:\>java -version
    java version "1.7.0_21"

我发现我有java 1.7.0_21这是最新版本,但我仍然收到错误。有人可以帮我解决这个问题。

如果我不能使用System.console,那么我可以使用任何其他方法从控制台读取密码作为隐藏字符。

完整的代码:

  import java.io.console;

  public class Test {

     public static void main(String[] args) {

            Console newConsole = System.console();

    }
   }

我在 import java.io.console (无法解析java.io.console)和控制台 newConsole = System.console(); (方法console()未定义类型系统和控制台无法解析或不是类型)行。

3 个答案:

答案 0 :(得分:1)

根据javadoc:

虚拟机是否具有控制台取决于底层平台以及虚拟机的调用方式。 如果从交互式命令行启动虚拟机而不重定向标准输入和输出流,则其控制台将存在,并且通常将连接到启动虚拟机的键盘和显示器。如果虚拟机是自动启动的,例如后台作业调度程序,那么它通常没有控制台。

答案 1 :(得分:1)

您希望import java.io.Console代替import java.io.console

import java.io.Console;

public class Test {
     public static void main(String[] args) {
            Console newConsole = System.console();
     }
}

这应该让它编译,但我发现System.console()会在IDE中返回null并检查this link

答案 2 :(得分:0)

只是想添加来自错误导入的错误

error: The import java.io.console cannot be resolved
    import java.io.console;

error: Console cannot be resolved to a type
    Console console = System.console();

通过修正建议的拼写错误

import java.io.Console;

public class Test {
   public static void main(String[] args) {
          Console newConsole = System.console();
   }
}

不会解决其他问题,即

  

方法console()未定义类型System“和”控制台无法解析或不是类型“

我意外地在Kubuntu 14.04中使用预先安装的javac编译器实现此错误

gcj-4.8 (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4

并且该编译器是导致上述问题的编译器。

当我意识到我 实际上正在使用JDK包中的javac并输入以编译

$JAVA_HOME/bin/javac 

这实际上有效,因为该编译器实际上来自我安装的JDK,而不是导致错误的GNU Java Compiler

我无法在GNU编译器中找到有关包的快速信息,但我知道在某些版本中他们在某些版本中没有System.console()

可以查看一下here,它是从here

重定向的

这个问题现在很有胡子,并且可能在新版本中不会出现此错误。

但我确信错误method console is undefined不是因为import错误或拼写错误而是因为编译器不知道在哪里找到System.console()方法。

虽然java版本已打印并且看起来正确

  

C:> java -version       java版“1.7.0_21”

它是什么java版本并不重要,而是使用编译器javac编译