Erro com NullPointerException em controle customizado!
6 respostas
anjomal
Galera da uma força ai o negocio e simples mais quando a gente esta aprendendo uma linguagem sozinho, as vezes a gente apanha de umas coisas faceis, e o seguinte eu estou criando um componente StatusBar, com varias funções, depois eui coloco o codigo pra galera aqui :-),mais vamos ao problema eu possuo uma função chamada enabledDate e enabledTime olha o corpo delas abaixo eu possuo uma variavel chamada Enabled que foi declarada assim:
privateCollectionEnableds;//abaixo segue as duas funçõespublicvoidenabledTime(intBandas,intFormato){EnabledDateTimeobj=newEnabledDateTime();obj.setBandas(Bandas);obj.setFormato(Formato);obj.setTipo(obj.TIME);Enableds.add(obj);if(!Ativo){Run=newThread(this);Run.start();Ativo=true;}}publicvoidenabledDate(intBandas,intFormato){EnabledDateTimeobj=newEnabledDateTime();obj.setBandas(Bandas);obj.setFormato(Formato);obj.setTipo(obj.DATE);Enableds.add(obj);if(!Ativo){Run=newThread(this);Run.start();Ativo=true;}}
//o objeto EnabledDateTime e uma classe que esta dentro da classe StatusBar o erro e quando //eu tento adicionar o objeto com add do collection ele dispara um NullPointerException diz ai galera onde eu estou oreiando :lol:
PARA QUE JANELAS SE POSSO VIVER SEM PAREDES !!!
SEJA LIVRE USE LINUX !!!
manda pra gente o erro que ele dispara, completo com a stacktrace
anjomal
Ai Galera vou postar o codigo fonte do componente que eu estou fazendo, e versão BETA então esta faltando algumas funcionalidades falow !!!
packageutil;/** * @author William Jammes de Oliveira * @version 1.0 * Usado para desenhar Barras de Status na Tela * Desenvolvido para Sicop Informática */importjava.util.*;importjava.text.*;importjavax.swing.*;importjava.awt.*;importjava.awt.event.*;classEnabledDateTime{staticfinalintDATE=0;staticfinalintTIME=1;privateintBandas;privateintFormato;privateintTipo;publicvoidsetBandas(intBandas){this.Bandas=Bandas;}publicvoidsetFormato(intFormato){this.Formato=Formato;}publicvoidsetTipo(intTipo){this.Tipo=Tipo;}publicintgettBandas(){returnBandas;}publicintgetFormato(){returnFormato;}publicintgetTipo(){returnTipo;}}publicclassStatusBarextendsJComponentimplementsRunnable{privateJLabel[]lblMensagen;privateCollectionEnableds;privateThreadRun;privatestaticbooleanAtivo=false;//Constante do formato da Date e da HorastaticfinalintMEDIUM=0;staticfinalintSHORT=1;staticfinalintLONG=2;/** *Cria um EsatusBar Simples */publicStatusBar(intBandas){lblMensagen=newJLabel[Bandas];setLayout(newBoxLayout(this,BoxLayout.X_AXIS));setBorder(BorderFactory.createEtchedBorder(0));for(inti=0;i<Bandas;i++){lblMensagen[i]=newJLabel("");add(Box.createHorizontalStrut(10));add(lblMensagen[i]);}}publicvoidpaint(Graphicsg){super.paint(g);}/** * Usado para Mudar o Texto da Barra de Status * Exemplo: setText("Nova Mensagen"); * */publicvoidsetText(intBandas,StringMensagen){lblMensagen[Bandas].setText(Mensagen);}/** * Usado para Retornar o Texto da Barra de Status * Exemplo: MeuTexto = getText(0); * */publicStringgetText(intBandas){returnlblMensagen[Bandas].getText();}publicvoidenabledTime(intBandas,intFormato){EnabledDateTimeobj=newEnabledDateTime();obj.setBandas(Bandas);obj.setFormato(Formato);obj.setTipo(obj.TIME);Enableds.add(obj);if(!Ativo){Run=newThread(this);Run.start();Ativo=true;}}publicvoidenabledDate(intBandas,intFormato){EnabledDateTimeobj=newEnabledDateTime();obj.setBandas(Bandas);obj.setFormato(Formato);obj.setTipo(obj.DATE);Enableds.add(obj);if(!Ativo){Run=newThread(this);Run.start();Ativo=true;}}/** When an object implementing interface <code>Runnable</code> is used * to create a thread, starting the thread causes the object's * <code>run</code> method to be called in that separately executing * thread. * <p> * The general contract of the method <code>run</code> is that it may * take any action whatsoever. * * @see java.lang.Thread#run() * */publicvoidrun(){Iteratoriterator=Enableds.iterator();EnabledDateTimetmp;while(iterator.hasNext()){tmp=(EnabledDateTime)iterator.next();switch(tmp.getTipo()){caseEnabledDateTime.DATE:lblMensagen[tmp.gettBandas()].setText(DateFormat.getDateInstance(tmp.getFormato(),Locale.getDefault()).format(newDate()));break;caseEnabledDateTime.TIME:lblMensagen[tmp.gettBandas()].setText(DateFormat.getTimeInstance(tmp.getFormato(),Locale.getDefault()).format(newDate()));break;}}}}
Falow olhem ai o erro ocorre na chamada a função add do objeto Collection t+
Bani
Pelo o que eu entendi, objeto “Enableds”, não foi instanciado em nenhum lugar, apenas declarado. Por isso dá NullPointerException.
Paulo_Silveira
é exatamente o que a bani falou
faltou algo do tipo
Enableds=newArrayList();
outra coisa
sua nomenclatura de variaveis esta fora do padrao recomendado pela sun. todas variaveis (exceto constantes) devem comecar com letra minuscula.
Leandro
Pow cara… bem loco!! Quando tiver bunitin manda pra gente a versão final… hehehe legal mesmo…
Só uma coisa pra acrescentar, na hora de determinar o número de Bandas no construtor, eu mando 1 “new StatusBar(1)”… e na hora de setar o texto se eu mandar 1 (pensando na primeira “Banda”) dá exception… acho que se vc controlasse isso dentro da classe ia ficar melhor…
Mas é só uma dica… tá bem loco…
anjomal
Ae Galera foi mal, eu venho da programação C++ e nela não ha muita coisa em relação a nomeclatura,então defini do meu jeito mais eu vou arrumar pois eu sou fanatico por desenvolvimento de controles e devo postar muitos aqui falow
brigadão !!!