Pedir nova entrada enquanto erro se repetir

Galera, como posso pra fazer o usuário inserir uma nova senha até parar de dar erro?
desde já agradeço.

public class Main {

    public static void main(String[] args) {

	Scanner ler = new Scanner(System.in);

	Sistema sistema = new Sistema();

	Usuario usuario = null;

	int contUsuarios = 0;
	boolean senhaInvalida =  false;
	int opc = 0;

	while(opc!=2) {

		System.out.println("1-Cadastrar novo usuário"+"\n2-Sair");
		opc = Integer.parseInt(ler.nextLine());

		if(opc==1) {
			try {
				usuario = new Usuario();

				System.out.println("Login:");
				usuario.setLogin(ler.nextLine());
				System.out.println("Senha:");
				usuario.setSenha(ler.nextLine());

				sistema.adicionarUsuario(usuario);
				contUsuarios++;
				System.out.println("Novo usuário cadastrado!");




			} catch (CadastroCheioException  e) {
				System.out.println(e.getMessage());
				opc = 2;

			} catch (PessoaDuplicadaException e) {
				System.out.println(e.getMessage());


			} catch (SenhaInvalidaException e) {

				senhaInvalida = true;
				while(senhaInvalida) {
					System.out.println(e.getMessage());
					System.out.println("Insira uma nova senha:");
					usuario.setSenha(ler.nextLine());
				}




			} catch (EmailInvalidoException e) {


			}

		}

	}
	System.out.println(contUsuarios+" Usuários foram cadastrados corretamente!");
	ler.close();
}
}

Alguém?

import java.io.PrintStream;
import java.util.Scanner;

public class Exemplo {

    public static void main(String[] args) {
        try {
            Exemplo programa = new Exemplo();
            programa.executar();
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }

    private final Scanner entrada = new Scanner(System.in);
    private final PrintStream saida = System.out;

    private Sistema sistema = new Sistema();
    private int contUsuarios = 0;

    public void executar() throws Exception {
        int opc = 0;
        while (opc != 2) {
            saida.println("1-Cadastrar novo usuário" + "\n2-Sair");
            opc = Integer.parseInt(entrada.nextLine());
            if (opc == 1) {
                cadastrarUsuario();
            }
        }
        saida.println(contUsuarios + " Usuários foram cadastrados corretamente!");
        entrada.close();
    }

    private void cadastrarUsuario() {
        while (true) {
            try {
                Usuario usuario = new Usuario();

                saida.println("Login:");
                usuario.setLogin(entrada.nextLine());
                saida.println("Senha:");
                usuario.setSenha(entrada.nextLine());

                sistema.adicionarUsuario(usuario);
                contUsuarios++;
                saida.println("Novo usuário cadastrado!");

                return;
            } catch (CadastroCheioException | PessoaDuplicadaException | SenhaInvalidaException | EmailInvalidoException e) {
                saida.println(e.getMessage());
            }
        }
    }
}