Чтение пароля из консоли в java

Я хочу прочитать пароль с консоли в одной моей 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(); (консоль метода () не определено для типа System и Console не может быть разрешено или не является строкой типа).


person Anup    schedule 13.08.2013    source источник
comment
Вы добавили оператор импорта для java.io.Console?   -  person MadProgrammer    schedule 13.08.2013
comment
Опубликуйте весь свой код для этого конкретного файла.   -  person Chris Thompson    schedule 13.08.2013
comment
Это должно помочь. stackoverflow.com/questions/15159762/   -  person JNL    schedule 13.08.2013
comment
Вы используете IDE? Является ли компилятор той же версией, что и интерпретатор?   -  person tbodt    schedule 13.08.2013
comment
@MadProgrammer - Спасибо за ваш ответ. да, я использовал оператор импорта. Я также получаю ошибку в этом утверждении.   -  person Anup    schedule 13.08.2013
comment
@Chris Thompson - Спасибо за ваш ответ. Я отредактировал и добавил код в свой вопрос.   -  person Anup    schedule 13.08.2013
comment
@tbodt - Спасибо за ваш ответ. Я использую IDE студии разработчиков SAP Netweaver. Версию интерпретатора не проверял. Я проверю это и добавлю комментарий к этому ..   -  person Anup    schedule 13.08.2013


Ответы (3)


согласно javadoc:

Наличие консоли у виртуальной машины зависит от базовой платформы, а также от способа вызова виртуальной машины. Если виртуальная машина запускается из интерактивной командной строки без перенаправления стандартных потоков ввода и вывода, ее консоль будет существовать и обычно будет подключена к клавиатуре и дисплею, с которых была запущена виртуальная машина. Если виртуальная машина запускается автоматически, например, планировщиком фоновых заданий, то она обычно не имеет консоли.

person criszhao    schedule 13.08.2013

Вы хотите 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 и проверит по этой ссылке.

person Eli Rose    schedule 13.08.2013

Просто хотел добавить, что ошибка, возникающая из-за неправильного импорта, будет

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

И именно этот компилятор вызывает проблему выше.

Когда я понял, что на самом деле не использовал javac из пакета JDK, и набрал для компиляции

$JAVA_HOME/bin/javac 

Это действительно сработало, потому что этот компилятор был на самом деле из JDK, который я установил, а не из Компилятор GNU Java, вызвавший ошибку

Мне не удалось быстро найти информацию о пакетах в компиляторе GNU, но я знаю, что когда-то у них не было System.console() в некоторых выпусках.

Вы можете посмотреть здесь, который был перенаправлен с здесь

Вопрос такой бородатый сейчас, и может быть в новых релизах этой ошибки быть не должно.

Но я, тем не менее, уверен, что ошибка method console is undefined возникает не из-за import ошибок или опечаток, а из-за того, что компилятор не знает, где найти метод System.console().

И хотя java версия была напечатана и выглядит корректно

C:>java -версия версия java "1.7.0_21"

Неважно, какая это java версия, важно, какой компилятор javac использовался для компиляции

person Alexander Nikiforov    schedule 15.10.2016