Я хотел знать, почему моя Java-программа работает в консоли, когда я это делаю:
javac Main.java
java Main
... а не в Eclipse, поскольку у меня есть эта ошибка:
Исключение в потоке "main" java.lang.NullPointerException в codePin.main.main(main.java:48) → char passwordArray [] = console.readPassword("Enter pin:");
Вот мой код:
package codePin;
import java.io.*;
import java.util.*;
public class main {
static public boolean readPinsData(File dataFile, ArrayList<Integer> data) {
boolean err = false;
try {
Scanner scanner = new Scanner(dataFile);
String line;
while (scanner.hasNext()) {
line = scanner.nextLine();
try {
data.add(Integer.parseInt(line));
} catch (NumberFormatException e) {
e.printStackTrace();
err = true;
}
}
scanner.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
err = true;
}
return err;
}
public static void main(String[] args) {
System.out.println("-----------------------");
System.out.println("APPLICATIONS BESOINS");
System.out.println("-----------------------");
Console console = System.console();
System.out.println(console == null);
int pinSize = 0;
int nbTry = 0;
boolean authenticated = false;
do {
do {
char passwordArray[] = console.readPassword("Enter pin: "); //This is the line causing the error
pinSize = passwordArray.length;
if (pinSize != 4) {
System.out.println("Pin must be 4 digits");
} else {
System.out.println("Checking...");
}
ArrayList<Integer> pins = new ArrayList<Integer>();
readPinsData(new File("bdd.txt"), pins);
String[] thePins = new String[pins.size()];
for (int i = 0; i < thePins.length; i++) {
thePins[i] = pins.get(i).toString();
}
String passEntered = String.valueOf(passwordArray);
for (int i = 0; i < thePins.length; i++) {
if (passEntered.equals(thePins[i]) && pinSize == 4) {
System.out.println(":)");
authenticated = true;
break;
}
}
} while (pinSize != 4);
if (!authenticated && pinSize == 4) {
System.out.println(":(");
nbTry++;
}
} while (nbTry < 3 && !authenticated);
}
}
Как вы можете видеть, я добавил System.out.println(console == null);
в начале моего общедоступного метода static void main, чтобы проверить, и он действительно возвращает true в консоли.
Поэтому мой вопрос: как инициализировать консоль в Eclipse, чтобы мой код мог работать? спасибо
Это связано с тем, что System.console()
вернет уникальный объект консоли, связанный с текущей виртуальной машиной Java, если таковой имеется, а eclipse не имеет уникальной консоли.
Вы должны попытаться использовать Scanner
или System.in
чтобы получить консольный ввод
Scanner scanner = new Scanner(System.in); String password = scanner.next();