Я написал программу для маскировки ввода, который пользователь вводит в командной строке. Подробнее: Когда моя программа запускается, я запускаю новый поток, который выводит звездочку каждые миллисекунды через System.out.print ("\ 010 *"). Между тем мой основной метод читается на входе пользователя через read.nextLine().Выход IDE отличается от командной строки
Когда я запускаю эту программу в затмении, выход представляет собой переполнение звездочек (что и следовало ожидать). Однако, когда я запускаю эту программу с моего терминала, я вижу только звездочку, когда я ввожу символ.
Почему это? Я прочитал несколько других статей, в которых говорится, что процессор выделяет 6-10% памяти в командной строке, тогда как типичная IDE получает более чем вдвое больше.
Мой код показан ниже только для справки:
import java.util.Scanner;
public class Main {
public static void main(String [] args){
PasswordMasker passwordMasker = new PasswordMasker();
passwordMasker.start();
Scanner scan = new Scanner(System.in);
String password = scan.nextLine();
passwordMasker.stopMasking();
System.out.println("The password is: " + password);
}
}
public class PasswordMasker extends Thread {
private boolean maskInProgress = true;
public void run(){
mask();
}
private void mask() {
while(maskInProgress){
try {
Thread.sleep(1);
System.out.print("\010*");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("Masking stopped");
}
public void stopMasking(){
this.maskInProgress = false;
}
}
Какие IDE вы используете? В какой операционной системе? Я просто скомпилировал ваш код с помощью Eclipse под окнами, а после замедления задержки до 100 мс и удаления «\ 010» он отлично работает как в среде IDE, так и в командной строке DOS. – Greycon