Как предлагают @IainM и @QuantumMechanic, вы не проверяете 'sc' на ноль.Если NPE возникает в sc.close (), 'sc' было нулевым, я бы сказал, что вы получили NPE, вызывающую sc.write (), и еще одну в блоке finally {}, вызывающем sc.close ().
Вы также не проверяете результат write (), поэтому вы можете писать частичные сообщения или вообще ничего.У вас также есть абсолютно бессмысленный тест для sc.isOpen ().В этом коде он либо нулевой, либо открытый, другой возможности нет.
И я не знаю, как можно назвать эту вещь эхо-сервером, когда он не читает никаких входных данных.
Это не способ использовать NIO.Вся идея в том, что вам не нужны дополнительные темы.Что-то серьезно не так с вашим дизайном.
Вы также лжете себе, печатая "Прервано!"на любое исключение и сокрытие фактического исключения, не печатая его сообщения или трассировки стека.Это также не способ использовать исключения.