Problema com Thread

boa tarde galera, to com um problema com o meu Projeto…
tava olhando ele, funcionamento tava 100%, so que eu resolvi dar uma enxugada, eliminar algumas linhas ou simplesmente diminuir a quantidade de imports utilizados
meu codigo, nao alterei nada na parte estrutural, so resolvi implementar os listeners no proprio metodo .addActionListener();, antes fiz tudo na unha, mas devido ao fato que tenho que utilizar Mouse e KeyListener resolvi dar uma enxugada pra nao ficar um codigo com mtos @Overrides

segue o cod:

        comboModoGravacao.getButtonAdd().addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                JCadModoGravacao gravacao = new JCadModoGravacao(true, getThis(), attTabela ); //attTabela é a minha Thread em execuçao
                gravacao.setVisible(true);
            }
        });

a thread funciona blz, pois quando eu dou um System.out.println nela aparece isso, o que significa que a thred esta ativa:

Thread[Thread-3,6,main]

me deparei com o seguinte problema:

Exception occurred during event dispatching:
java.lang.NullPointerException
        at sga.tela.principais.JCadComDoisCampos.paraThreadSuperior(JCadComDoisCampos.java:425)
        at sga.tela.principais.JCadComDoisCampos.<init>(JCadComDoisCampos.java:46)
        at sga.tela.extended.JCadModoGravacao.<init>(JCadModoGravacao.java:19)
        at sga.tela.principais.JCadMidias$14.actionPerformed(JCadMidias.java:404)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
        at java.awt.Component.processMouseEvent(Component.java:6263)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
        at java.awt.Component.processEvent(Component.java:6028)
        at java.awt.Container.processEvent(Container.java:2041)
        at java.awt.Component.dispatchEventImpl(Component.java:4630)
        at java.awt.Container.dispatchEventImpl(Container.java:2099)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
        at java.awt.Container.dispatchEventImpl(Container.java:2085)
        at java.awt.Window.dispatchEventImpl(Window.java:2475)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:178)
        at java.awt.Dialog$1.run(Dialog.java:1045)
        at java.awt.Dialog$3.run(Dialog.java:1097)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.awt.Dialog.show(Dialog.java:1095)
        at java.awt.Component.show(Component.java:1563)
        at java.awt.Component.setVisible(Component.java:1515)
        at java.awt.Window.setVisible(Window.java:841)
        at java.awt.Dialog.setVisible(Dialog.java:985)
        at sga.tela.principais.JCadMidias$1.run(JCadMidias.java:239)
        at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Hibernate: 

e ai nao sei como resolver, pq a thread esta viva esta viva…
se alguem puder ajudar!
agradeço!

Poste o código de onde você inicializa a Thread e atribui a variável attTabela.

E também poste o código do método paraThreadSuperior do JCadComDoisCampos.java, ressaltando qual é a linha 425 com algum comentário.

ta:
Inncializando a thread, no construtor do JDialog eu chamo este Metodo

    /**
     *
     *  Metodo interno que configura todos os componentes desta classe
     *
     **/
    private void configurar() {
        initComponents();                                       //Inicia os componentes do JDialog
        attTabela = new AtualizadorTabela(this);                //tenho que passar esta classe para a thread poder realizar a execucao automatica - THREAD inicializada
        sga.util.Utilitarios.setMascaraData(textFieldData);         //Mascara para Data
        sga.util.Utilitarios.setMascaraTempo(textFieldDuracao);     //Mascara para Duração
        sga.util.Utilitarios.setMascara$$(textFieldPreco);          //Mascara para preco
        addListeners();                                         //Adiciona os ouvintes para botoes e outros componentes
        preencheMidias();                                       //preenche a tabela de midias

        configuracaoInicial();                                
        setLocationRelativeTo(null);                            //dialog ira localizar no meio da tela
        setResizable(false);                                    //nao podera ser redimensaionado
    }

ConstrutorJCadComDoisCampos.java:


    public JCadComDoisCampos(boolean modal, JDialog objectFrame , AtualizadorTabela AtualizadorSuperior ) {
        super(objectFrame, modal);
        this.AtualizadorSuperior = AtualizadorSuperior;
        paraThreadSuperior();
    }

    private void paraThreadSuperior() {
        AtualizadorSuperior.suspend(); //AQUI É A LINHA 425
        thisConfigurar();                // Configuramos este frame
    }

o que eu achei mais estranho que a thread atualiza normalmente no frame, e se mostra rodando o tempo inteiro, em outros casos que eu fiz na unha funcionou direitinho, so deu esse erro depois que eu implementei o dentro do addActionListener();

Bom, tem muito potencial para bobagem aí:

  1. Nunca se passa “this” no construtor. Tem que lembrar que o construtor ainda está construindo sua classe, e o “this” não está pronto;
  2. Você não deve usar o método suspend(). Ele foi deprecated.
  3. Não vi onde você chama o método start() da Thread.

De qualquer forma, está estranho o seu método estar dando um NullPointerException. Já tentou usar um depurador?
Mais alguém mexe na variável AtualizadorSuperior ?

  1. entao eu coloco somente o this depois do setResizable??
  2. que método eu utilizo pra pausar a thread?
  3. o start da thread nao é realizada dentro desta classe, e sim no construtor do AtualizadorTabela.

essa questao que eu mencionei ali em cima eu consegui resolver, so tenho estas duvidas ai…
a classe AtualizadorTabela esta relacionada basicamente com todos os meus Dialogs que contem tabela, ou seja, em todos os dialogs tem atualizacao automatica…

O importante é que você nunca passe this como parâmetro num construtor. Isso nem sempre é possível, mas tome muito cuidado ao faze-lo.
Agora, você pode continuar usando this.variavel = xyz; normalmente.

Não existe um método que pause a thread. Você deve implementar um, com uma variável de controle. É importante que o acesso a essa variável seja sincronizado ou, no mínimo, ela seja declarado como volatile.

Estranho, pois como o start() só pode ser chamado uma única vez, normalmente ele já é dado na criação da Thread.

Threads é um assunto sinistro, que pode levar a diversos erros. Procure estudar bem o assunto. Há também alguns detalhes envolvendo threads e Swing, como vc não poder chamar métodos do Swing a partir de uma thread secundária, já que eles não são sincronizados.