JLabel.setText(), erro nullPointer[RESOLVIDO]

14 respostas
banger

bom dia pessoal tudo bom??

pessoal e o seguinte, tenho um array de booleanos, e um array de JLabels, quanto o array de booleanos da posição 0 estiver setado como true, gostaria q o array de Jlabels da posição 0 tivesse o texto setado como “Ativado”.

fiz desse jeito aqui o:

//array de Labels
private javax.swing.JLabel[] LabelArray = new javax.swing.JLabel[] { Lstats1, Lstats2,
    Lstats3, Lstats4, Lstats5, Lstats6, Lstats7, Lstats8, Lstats9, Lstats10, Lstats11, Lstats12,
    Lstats13, Lstats14, Lstats15, Lstats16, Lstats17, Lstats18, Lstats19, Lstats20,
    Lstats21, Lstats22, Lstats23, Lstats24, Lstats25, Lstats26, Lstats27, Lstats28,
    Lstats29, Lstats30, Lstats31, Lstats32, Lstats33, Lstats34, Lstats35, Lstats36,
    Lstats37, Lstats38, Lstats39, Lstats40};


//poling de envio periodico
public void run() {    

       //troca o valor do texto do JLabel
       while(true) {
       for(int i = 0; i < 40; i++) {
           
           if (ioStatsS[i] == true) {
            LabelArray[i].setText("Ativado");
        } else{
            LabelArray[i].setText("Desativado");

        }
       }
           try {

               
                   Thread.sleep(250);


           switch(SendMsg) {

               case mIdent :
                   
                       WriteToPortI();
                   

                  
                   break;

               case mSaidaS :
                                          
                       WriteToPortS();                                                      
                   break;

               case mSaidaW :

                   WriteToPortW(ioStatsW);                   
                   break;

               case mEntrada :
                  
                       SendMsg = FrameMsg.mEntrada;
                       WriteToPortE();                                                                            
                       break;
                   
               default :
                   
                   SendMsg = FrameMsg.mIdent;
           }

       } catch (InterruptedException ex) {
                   Logger.getLogger(AeSManutenção.class.getName()).log(Level.SEVERE, null, ex);               
               }

       }
   }

mas ele da um erro de null pointer exception:

Exception in thread "Thread-4" java.lang.NullPointerException
        at AeSManutenção.run(AeSManutenção.java:20)
        at java.lang.Thread.run(Thread.java:619)

alguem poderia me ajudar??

desde jah agradeço.

14 Respostas

sandro.ci02

A label esta null;

LabelArray[i] = new  JLabel();
LabelArray[i].setText("Ativado");
banger

e como eu sano isso?? pg jah tentei varias coisas e nada, e tpw, eu coloquei os valores na label

[...] new Jlabel[] { Lstats1, Lstats2[...] };

tpw isto naum esta setando os valores dentro do array??

banger

??

remixlara

pra cada label dentro do array vc precisa instancia-lo…
como nosso colega sandro.ci02 mostrou…

antes de adicionar o texto no jlabel vc precisa cria-lo antes…

LabelArray[i] = new  JLabel();
LabelArray[i].setText("Ativado");
banger

entaum mas eu jah tenho os label, estes labels na verdade jah foram criados, o que eu queria e jogalos dentro do array, pra naum ter que dar um set text um por um!!
será que este naum é o melhor jeito??pq o que eu preciso é que eles troquem o texto de acorco com o valor do booleano

banger

??

ViniGodoy

Onde os labels foram criados? Você tem certeza que esse array foi criado após os labels terem sido criados?

banger

sim eu criei o array depois das labels, soh que as labels foram criadas altomaticamente por ferramentas da GUI do NetBeans.

banger

detalhe, todos eles sao criados como new JLabel();.

banger

??

ViniGodoy

banger:
sim eu criei o array depois das labels, soh que as labels foram criadas altomaticamente por ferramentas da GUI do NetBeans.

Quem criou o que não faz a menor diferença. O importante é que, no código final gerado, o seu “new” esteja depois do “new” das labels.

banger

blz, eu crio o array

tanto:

JLabel[] LabelArray = new JLabel();

onde ele pede para criar um class no pacote, quanto:

private javax.swing.JLabel[] LabelArray = new JLabel[40];

onde ele aceita mas quando vou referenciar o espaço zero do array com o JLabel pede para criar class tmbm.

lembrando que o jeito acima ele ateh aceita mas dah nullPointer, o que eu naum estou conseguindo e jogar os label dentro do array, antes eu consegui setalos desta maneira:

if (ioStatsS[0] == true) {
            Lstats1.setText("Ativado");
        } else{
            Lstats1.setText("Desativado");

        }

onde funcionou, soh que como visto no codigo acima, eu tenho 40 labels, fora dos outros frames e eu gostaria de ao inves de fazer if pra todos eu queria utilizar um simples for que resolveria meu problema, mas naum consigo coloca-los dentro do array para fazer isso, o pessoal aqui falou de algo como ponteiro, mas eu dei uma lida nisso e vi que ponteiro vc passa um endereço de memoria que aponta para o objeto ou algo do tipo, mas java naum tem isso, por n motivos, mas o q eu quero eu soh naum estou conseguindo escrver o jeito correto.

outra coisa, pq que no primeiro codigo que postei eu coloquei label por label dentro dele, mas na hora de setar deu como nulo???

banger

??

banger

galera vlw eu consegui, realmente vcs estavem certos, a unica coisa que estava pecando e que eu naum estava colocando os sets dos array dentro do metodo, vlw gente e desculpa minha burrice!

Criado 23 de junho de 2010
Ultima resposta 23 de jun. de 2010
Respostas 14
Participantes 4