Form sendo chamado várias vezes

Bom, eu tenho uma janela de notificação, sempre que chega um email novo, eu recebo essa notificação, funciona? Funciona, só que assim, na primeira vez o form abre uma vez, na segunda já abre duas vezes, na terceira abrem QUATRO:

Alguém pode me dar uma ajuda?

Meu método pra ficar buscando o email:

public void atualizando() {
    new Thread() {
        @Override
        public void run() {
            try {
                // (1) Informações do Servidor
                Properties props = new Properties();
                props.put("mail.imap.starttls.enable", "true");
                props.put("mail.imap.host", "stmp.gmail.com");
                props.put("mail.imap.port", "587");
                props.put("mail.imap.auth", "true");
                props.put("mail.imap.starttls.required", "true");
                props.put("mail.imap.ssl.trust", "stmp.gmail.com");
                Session session = Session.getInstance(props);

                // (2) Conexão com o servidor
                store = session.getStore("imaps");
                store.connect("imap.gmail.com", "email@gmail.com", "senha");

                pastaEmail = store.getFolder("INBOX");
                pastaEmail.open(Folder.READ_WRITE);

                // Fazemos a primeira leitura de emails.
                int start = 1;
                int end = pastaEmail.getMessageCount();
                while (start <= end) {
                    // new messages that have arrived
                    start = end + 1;
                    end = pastaEmail.getNewMessageCount();
                    //end = pastaEmail.getNewMessageCount();
                }

                // Adicionando um MessageCountListener para "ouvir" novas mensagens
                pastaEmail.addMessageCountListener(new MessageCountAdapter() {
                    @Override
                    public void messagesAdded(MessageCountEvent evt) {
                        try {
                            Message[] msgs = evt.getMessages();
                            for (Message msg : msgs) {
                                System.out.println(msg.toString());
                                Notifica nf = new Notifica();
                                nf.setVisible(true);
                            }
                        } catch (Exception ex) {
                            System.out.println(ex);
                        }
                    }
                });

                System.out.println("Buscando");
                // Aguardando novas mensagens
                for (;;) {
                    ((IMAPFolder) pastaEmail).idle();
                }
            } catch (MessagingException ex) {
                System.out.println(ex);
            }
        }
    }.start();
}
}

Meu método pra ler o email:

public void lendo() {
    campolog.setContentType("text/html");
    try {
        // (1) Informações do Servidor
        Properties props = new Properties();
        props.put("mail.imap.starttls.enable", "true");
        props.put("mail.imap.host", "stmp.gmail.com");
        props.put("mail.imap.port", "587");
        props.put("mail.imap.auth", "true");
        props.put("mail.imap.starttls.required", "true");
        props.put("mail.imap.ssl.trust", "stmp.gmail.com");
        Session session = Session.getInstance(props);

        // (2) Conexão com o servidor
        store = session.getStore("imaps");
        store.connect("imap.gmail.com", "email@gmail.com", "senha");

        // Buscar referência das pastas (Não precisa tirar o comentario, só se você quiser saber o nome das pastas).
//            Folder[] nomePastas = store.getDefaultFolder().list("*");
//            for (Folder pasta : nomePastas) {
//                if ((pasta.getType() & Folder.HOLDS_MESSAGES) != 0) {
//                    System.out.println(pasta.getFullName() + ": " + pasta.getMessageCount());
//                }
//            }
        //System.out.println("Total de E-mails: " + mensagens.length);
        // (3) Escolhemos a pasta INBOX e colocamos no modo "Ler e Escrever (READ_WRITE)" (Isso "autoriza" a modificação de "Não Lido" para "Lido")
//            SortTerm[] termos = new SortTerm[1];
//            termos[0] = SortTerm.ARRIVAL;
        pastaEmail = store.getFolder("INBOX");
        pastaEmail.open(Folder.READ_WRITE);

        // (4) Cria filtro para mensagens não lidas.
        Flags visto = new Flags(Flags.Flag.SEEN);
        FlagTerm filtroNaoLidas = new FlagTerm(visto, false);

        // (5) Cria filtro para "ler" apenas um "endereço".
        FromStringTerm filtroEmail = new FromStringTerm("@facilitamovel.com.br");

        // (6) Combina os filtros em um só.
        SearchTerm filtros = new AndTerm(filtroNaoLidas, filtroEmail);

        //Message[] mensagens = pastaEmail.getMessages(); //Aqui pega todos os emails.
        mensagens = pastaEmail.search(filtros); //Aqui filtra os emails de acordo com o que queremos.
        for (int q = 0; q < mensagens.length; q++) {
            mensagens[q].setFlag(Flags.Flag.SEEN, true);
        }

        mudarStatus();

        BuscarEmails bc = new BuscarEmails();
        bc.atualizando();

        pastaEmail.close();
        store.close();
    } catch (NoSuchProviderException e) {
        System.out.println("Erro: " + e);
    } catch (MessagingException e) {
        lerEmail();
        System.out.println(e.getMessage());
    }
}