Почему вот этот код не прошел (вилидатор долго думал и передумал)
public class Client {
    protected Connection connection;
    private volatile boolean clientConnected = false;

    protected String getServerAddress() {
        ConsoleHelper.writeMessage("Введите адрес сервера: ");
        return ConsoleHelper.readString();
    }

    protected int getServerPort() {
        ConsoleHelper.writeMessage("Введите порт сервера сервера: ");
        return ConsoleHelper.readInt();
    }

    protected String getUserName() {
        ConsoleHelper.writeMessage("Введите порт сервера сервера: ");
        return ConsoleHelper.readString();
    }

    protected boolean shouldSendTextFromConsole() {
        return true;
    }

    protected SocketThread getSocketThread() {
        return new SocketThread();
    }

    protected void sendTextMessage(String text) {
        try {
            connection.send(new Message(MessageType.TEXT, text));
        } catch (IOException e) {
            ConsoleHelper.writeMessage("не возможно отправить сообщение");
            clientConnected = false;
        }
    }

    public static void main(String[] args) {
        Client client = new Client();
        client.run();
    }

    public void run()  {
        SocketThread socketThread = getSocketThread();
        socketThread.setDaemon(true);
        socketThread.run();

        try {
            synchronized (this) {
                this.wait();
            }
        } catch (InterruptedException e) {
            ConsoleHelper.writeMessage("Программа завершила свою работу аварийно");
            System.exit(1);
        }

        if (clientConnected) {
            ConsoleHelper.writeMessage("Соединение установлено. Для выхода наберите команду 'exit'.");
            while (clientConnected) {
                String str = ConsoleHelper.readString();
                if (str.equalsIgnoreCase("exit"))
                    break;
                else if (shouldSendTextFromConsole())
                    sendTextMessage(str);
            }
        }
        else ConsoleHelper.writeMessage("Произошла ошибка во время работы клиента.");
    }

    public class SocketThread extends Thread {

    }
}
а с этим все в порядке
public class Client {
    protected Connection connection;
    private volatile boolean clientConnected = false;

    protected String getServerAddress(){
        //make a request address of server of the user
        ConsoleHelper.writeMessage("Введите адрес сервера: ");
        return ConsoleHelper.readString();
    }

    protected  int getServerPort(){
        // make a request ports of server of the user
        ConsoleHelper.writeMessage("Введите порт сервера сервера: ");
        return ConsoleHelper.readInt();
    }

    protected String getUserName(){
        // make a request name of user
        ConsoleHelper.writeMessage("Введите порт сервера сервера: ");
        return ConsoleHelper.readString();
    }

    protected boolean shouldSendTextFromConsole(){return true;}

    protected SocketThread getSocketThread(){return new SocketThread();}

    protected void sendTextMessage(String text){
        try {
            connection.send(new Message(MessageType.TEXT, text));
        } catch (IOException e) {
            ConsoleHelper.writeMessage("не возможно отправить сообщение");
            clientConnected=false;
        }
    }

    public static void main(String[] args){
        Client client = new Client();
        client.run();
    }

    public  void run(){
        SocketThread socketThread = getSocketThread();
        socketThread.setDaemon(true);
        socketThread.start();
        try {
            synchronized (this){
                this.wait();
            }
        } catch (InterruptedException e) {
            ConsoleHelper.writeMessage("произошла ошибка, программа будет закрыта");
            System.exit(1);
        }
        if(clientConnected){
            ConsoleHelper.writeMessage("Соединение установлено. Для выхода наберите команду ‘exit’");
            while (clientConnected) {
                String text = ConsoleHelper.readString();
                if (text.equalsIgnoreCase("exit")) {
                    break;
                }else if(shouldSendTextFromConsole()){
                    sendTextMessage(text);
                }
            }
        } else {
            ConsoleHelper.writeMessage("Произошла ошибка соединения");
        }
    }

    public class SocketThread extends Thread{
    }

}
они идентичны разница только в отправляемых сообщениях и то по заданию должно отправляться "Соединение установлено. Для выхода наберите команду 'exit'." в конце точка. и валидатор пропустил а тот что сверху нет?