1

我想在我的一个 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 无法解析) 和 Console newConsole = System.console();中遇到编译器错误 (方法 console() 未定义类型 System 和 Console 无法解析或不是类型)行。

4

3 回答 3

1

根据javadoc:

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

于 2013-08-13T03:28:39.783 回答
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() 将null在 IDE 中返回并检查此链接

于 2013-08-13T03:36:20.933 回答
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" 和 " Console cannot be resolved or is not a type"

我不小心在 Kubuntu 14.04 中使用了预装的javac编译器,实际上这个错误是

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

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

当我意识到我实际上并没有javac从 JDK 包中使用,并输入编译

$JAVA_HOME/bin/javac 

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

我无法在 GNU 编译器中找到有关软件包的快速信息,但我知道前一段时间它们System.console()在某些版本中没有。

可以看看这里,这是从这里重新定向的

这个问题现在很棘手,并且可能在新版本中不应该出现这个错误。

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

尽管java版本已打印并且看起来正确

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

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

于 2016-10-15T18:44:06.630 回答