Problema para adicionar RadioButton em ButtonGroup

4 respostas
T

Ae galera novamente estou postando este erro que está dando será que alguem pode me ajudar?a linha em negrito é que está com problema

public void setRadioPanel(JPanel[] _painel){
        this.painel = _painel;
        bg = new ButtonGroup[painel.length];
        
        for(int i=0; i < painel.length;i++){              
          for(int y=0; y < painel[i].getComponentCount();y++){                              
               if(painel[i].getComponent(y) instanceof JRadioButton){                   
                   [b]bg[i].add((AbstractButton) painel[i].getComponent(y)); [/b]                 
               }
           } 
        }
    }

o erro que está dando é este:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at utilidades.ControlRButtons.setRadioPanel(ControlRButtons.java:34)
        at apresentacao.FFichaAtd.formInternalFrameOpened(FFichaAtd.java:656)
        at apresentacao.FFichaAtd.access$100(FFichaAtd.java:22)
        at apresentacao.FFichaAtd$1.internalFrameOpened(FFichaAtd.java:151)
        at javax.swing.JInternalFrame.fireInternalFrameEvent(JInternalFrame.java:1461)
        at javax.swing.JInternalFrame.show(JInternalFrame.java:1636)
        at java.awt.Component.show(Component.java:1300)
        at java.awt.Component.setVisible(Component.java:1253)
        at javax.swing.JComponent.setVisible(JComponent.java:2535)
        at apresentacao.FPrincipal.jToggleButton6ActionPerformed(FPrincipal.java:103)
        at apresentacao.FPrincipal.access$200(FPrincipal.java:26)
        at apresentacao.FPrincipal$2.actionPerformed(FPrincipal.java:71)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
        at javax.swing.JToggleButton$ToggleButtonModel.setPressed(JToggleButton.java:269)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:234)
        at java.awt.Component.processMouseEvent(Component.java:5488)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3126)
        at java.awt.Component.processEvent(Component.java:5253)
        at java.awt.Container.processEvent(Container.java:1966)
        at java.awt.Component.dispatchEventImpl(Component.java:3955)
        at java.awt.Container.dispatchEventImpl(Container.java:2024)
        at java.awt.Component.dispatchEvent(Component.java:3803)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
        at java.awt.Container.dispatchEventImpl(Container.java:2010)
        at java.awt.Window.dispatchEventImpl(Window.java:1774)
        at java.awt.Component.dispatchEvent(Component.java:3803)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
        at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)

Agradeço antecipadamente

4 Respostas

ramilani12

não entendi essa linha:

bg = new ButtonGroup[painel.length];
T

ela está pegando a quantidade de painels que possui e criando os buttonGroups

Mantu

Estou assumindo que bg seja um campo da sua classe declarado de alguma forma parecida com isso:

private ButtonGroup[] bg;

Assumindo isso, o problema é o seguinte:
Em java, quando se cria um vetor utilizando esta expressão:

new UmaClasseQualquer[umValorInteiroQualquer]

É instanciado na memório um vetor capaz de armazenar até umValorInteiroQualquer de objetos do tipo UmaClasseQualquer. Porém, em cada posição deste recém-instanciado vetor é preenchida com null.
É isso que acontece no seu caso: Você cria um vetor de objetos ButtonGroup e o referencia com a variável bg. Logo depois, você acessa o i-ésimo elemento desse vetor - que é null, qualquer que seja o valor de i - e tenta acessar um suposto método add deste i-ésimo elemento. Traduzindo, é como se você estivesse tentando fazer algo assim:

null.add(...

E isso é o que faz ser lançada a exceção NullPointerException: Tentar acessar algum membro a partir de uma referência que aponta para null - bg[ i ], no seu caso.
Voce deve, depois de instanciar o vetor bg, alimentá-lo, ou seja, atribuir um objeto ButtonGroup a cada posição de bg.
Qualquer dúvida, pergunte mais!

T

Mantu:

E isso é o que faz ser lançada a exceção NullPointerException: Tentar acessar algum membro a partir de uma referência que aponta para null - bg[ i ], no seu caso.
Voce deve, depois de instanciar o vetor bg, alimentá-lo, ou seja, atribuir um objeto ButtonGroup a cada posição de bg.
Qualquer dúvida, pergunte mais!

Resolvi o problema.
Pensava que estava passando os ButtonsGroup por associação, mas não estava. Então quando passei a instanciá-los como você falou, resolveu o problema.

Muito Obrigado

Criado 13 de dezembro de 2006
Ultima resposta 14 de dez. de 2006
Respostas 4
Participantes 3