Error "ConcurrentModificationException" when modifying (insert data in) ArrayList

0

I'm trying to create a small login system in Java.

I have the following classes:

LoginController:

public static void main(String[] args) {

    ArrayList<Usuario> listaUsuarios = UsuarioController.listaUsuarios;
    // Adiciona um administrador padrao ao ArrayList de Usuarios
    Usuario adminpadrao = new Usuario("Admin", "123456", 1);
    UsuarioController.listaUsuarios.add(adminpadrao);

    String opcao = "";

    while (!opcao.equals("0")) {

        LoginView lv = new LoginView();
        AdminController ac = new AdminController();
        UsuarioController uc = new UsuarioController();

        Usuario u = lv.capturarLogin();
        // Captura o usuario para fazer o login, verifica se ele esta presente no ArrayList e se ele é um administrador. Caso sim, ele vai para o menu de administrador, Caso não, ele vai para o menu de usuario comum
        for (Usuario usuario : listaUsuarios) {
            if (usuario.getUsuario().equals(u.getUsuario()) && usuario.getSenha().equals(u.getSenha())) {
                if (usuario.getAdmin() == 1) {
                    ac.menuAdmin();
                } else {
                    uc.menuUsuario();
                }
            }
        }

    }
}

AdminController:

public class AdminController {

    Usuario user = new Usuario();
    AdminView av = new AdminView();

    ArrayList<Usuario> listaUsuarios = UsuarioController.listaUsuarios;

    public void menuAdmin() {

        String opcao = av.exibirMenuAdmin();

        if (opcao.equals("1")) {
            cadastrarUsuario();
        } else if (opcao.equals("2")) {
            listarUsuarios();
        } else if (opcao.equals("3")) {
            excluirUsuario();
        } else if (opcao.equals("4")) {
            Util.continuar();
        }
    }

    public void cadastrarUsuario() {
        Usuario u = av.capturarUsuario();
        listaUsuarios.add(u);
        Util.continuar("Usuario cadastrado com sucesso");
    }

    public void listarUsuarios() {
        av.listarUsuarios(listaUsuarios);
        Util.continuar("Pressione enter para continuar");
    }

    public void excluirUsuario() {
        String u = av.capturarNomeUsuario();

        for (Usuario usuario : listaUsuarios) {
            if (usuario.getUsuario().equals(u)) {
                Util.escreva("Usuario excluido: " + usuario.getUsuario());
                listaUsuarios.remove(usuario);
            } else {
                Util.continuar("Usuario não encontrado");
            }
        }
}

However, after I log in with the default admin and try to register a new user, the compiler (Eclipse) returns the error:

Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)
at java.util.ArrayList$Itr.next(ArrayList.java:851)
at crm.controller.LoginController.main(LoginController.java:27)

This last line of error at crm.controller.LoginController.main(LoginController.java:27) refers to the for (Usuario usuario : listaUsuarios) { line in LoginController in the login verification step

I think it's some error in the ArrayList. I'm trying to use a single ArrayList for both classes.

I'd like help to resolve this error. Thank you in advance.

    
asked by anonymous 06.09.2017 / 01:43

0 answers