Возможно вы и так догадались, но повторю. Описанная проблема похожа на то, что вы где-то после окончания передачи не закрываете канал. Для буферов нужно использовать try with resource
Предполагая, что когда вы начинали Java была с очень неудобным, нелаконичным синтаксисом. Сейчас другие времена. Даже переменные можно объявлять словом var. И конечно, мало кто любит саму Java, но многие любят JVM.
TopTyns, а вообще можно начат отсюда, хотя для 15 летнего юноши может быть сложно. https://ru.hexlet .io/pages/recommended-books . Почему то не пропускает ссылку на хекслет
Ограничения на пароли это какая-то анти-защита. Чем больше в пароле может быть символов тем сложнее его подобрать, а если пароли могут быть на родном языке, то это еще и удобно.