Ваша программа для подхода 1 не работает, поскольку кажется, что поток ластика не закрыт. Вы должны изменить ваше начальное логическое значение на stopMasking на false, а затем сказать, что установите его в true после перехвата. Есть ряд ресурсов, доступных с кодом, который делает именно так. Лучшее, что я нашел здесь:
http://www.cse.chalmers.se/edu/year/2018/course/TDA602/Eraserlab/pwdmasking.html
Это работает в моей сборке Eclipse 2020. Что касается вашего второго подхода, консоль не работает для ввода данных пользователем в среде IDE, поэтому проблемы там, но не из командной строки. Если вы хотите использовать эту версию, вы можете заменить консоль сканером:
import java.util.Scanner
Scanner input = new Scanner(System.in);
String password = input.nextLine();
//implementation
Я бы также предложил импортировать определенные файлы классов c, которые вам нужны. Импорт всего java .io приведет к сбою вашей программы. Надеюсь, это поможет!