【问题标题】:Reading password from Console in java在java中从控制台读取密码
【发布时间】:2013-08-13 01:41:48
【问题描述】:

我想在我的一个 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() 未定义类型 System 和 Console 无法解析或不是类型)行。

【问题讨论】:

  • 您是否添加了java.io.Console 的导入语句?
  • 请为该特定文件发布所有代码。
  • 您使用的是 IDE 吗?编译器和解释器版本一样吗?
  • @MadProgrammer - 感谢您的回复。是的,我使用了 import 语句。我也收到了该声明的错误。

标签: java java-io


【解决方案1】:

根据 javadoc:

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

【讨论】:

    【解决方案2】:

    你想要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

    【讨论】:

      【解决方案3】:

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

      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();
         }
      }
      

      不会解决其他问题,就是

      没有为 System 类型定义方法 console() 和“Console 无法解析或不是类型”

      我不小心在 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 -版本 java版本“1.7.0_21”

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

      【讨论】:

        猜你喜欢
        • 2014-01-22
        • 1970-01-01
        • 2016-05-22
        • 2014-02-04
        • 2014-12-15
        • 2019-06-14
        • 2017-11-06
        • 2011-12-29
        相关资源
        最近更新 更多