Executa codigo do if mas depois da nullpointerexception[resolvido]

13 respostas
P
ola, tenho um painel que crio apos fazer uma pesquisa no banco de dados até ai tudo bem ele pesquiso e eu consigo adicionar o resultado na tela mas apos isto ocorre este erro
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at efetuaPagamento.registraPagamento(efetuaPagamento.java:339)
	at efetuaPagamento$3.actionPerformed(efetuaPagamento.java:187)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
meu codigo é este
try
		{
			int q=0;
			int x=30;
			int y=20;
			JPanel panel=new JPanel();
			panel.setBounds(y, 270, 500, 200);
			panel.setBackground(Color.cyan);
			int maior=0,num1=0;

			System.out.println("select parcelas from financeiro where rc_aluno='"+ t2.getText() +"'");
			resultado = comando.executeQuery("select parcelas from financeiro where rc_aluno='"+ t2.getText() +"'");
			while(resultado.next())
			{
				l[q]=new JLabel(resultado.getObject(1).toString());
				q++;
			}
			for(int i=0;i<l.length;i++)
			{
				if(l[i].getText()!=null)//o erro aponta para esta linha
				{	
					num1=Integer.parseInt(l[i].getText());
					if(maior<num1)
					{
						maior=num1;
						System.out.println("o maior é "+maior+" num1 é "+num1);
						l[i].setBounds (20, x,120, 25);
						panel.add(l[i]);
						tela.add(panel);
						repaint();
						x+=30;
					}
				}
			}
			System.out.println("fora do if\n o maior é "+maior+" num1 é "+num1);
			//ver qts parcelas tm dai d acordo com este num sao criados as caixas d txt no painel
			//depois add na tela


		}
		catch(SQLException er)
		{
			er.printStackTrace();
		}
	}
alguém pode me ajudar a encontrar o erro? obrigada

13 Respostas

P

e qualquer codigo que eu tente executar após akele for não roda!!!
alguém pode me ajudar a encontrar o erro?
obg
=]

Stormqueen1990

Qual o código da linha 339 da sua classe efetuaPagamento.java?

Stormqueen1990

Ops, acabei de ver seu comentário no código.
Tente printar o conteúdo da variável antes do if.

drsmachado

O array de JLabels “l” não está instanciado.
Seria o mesmo que você declarar

JTextField jtf;

//falta: jtf = new JTextField();

if(jtf.getText() != null){

...

Entendeu?

Stormqueen1990

drsmachado:
O array de JLabels “l” não está instanciado.
Seria o mesmo que você declarar

JTextField jtf;

//falta: jtf = new JTextField();

if(jtf.getText() != null){

...

Entendeu?

É mais provável que seja uma posição específica. Senão já daria erro no while() anterior.

P

ola Stormqueen1990,
fiz o print como tu disseste antes do if e apareceu os mesmos valores que são exibidos dentro do laço do if
o print ficou assim

antes do if 1 antes do if 2 antes do if 3 antes do if 4 antes do if 5
e ta dando nullpointerexception na mesma linha =[

P

drsmachado,
eu instanciei o array de JLabel,
=[
só que o tamanho dele é maior que o resultado que estou pegando do banco tipo o tamanho do vetor l é 12 enquanto eu pego do banco 5 resultados da minha pesquisa,é por isto que esta dando erro?
é q eu criei o vetor deste tamanho porque é o maximo de resultados que eu posso ter

drsmachado

Sim, é possível.
Você chama o método “getText()”.
Tente colocar :

if(l[i] != null){
if(l[i].getText() != null){
P

gente modifiquei o seguinte

while(resultado.next()) { l[q]=new JLabel(resultado.getObject(1).toString()); q++; } System.out.println(q); for(int i=0;i<q;i++) {...}
agora eu percorro so as posições preenchidas do meu vetor não esta dando mais akele erro mas sera que isto nao me trara outros problemas no codigo depois?

P

drsmachado
vou tentar do jeito que tu disseste com 2 if’s
=]

drsmachado

Era uma alternativa.
Outra sugestão, seria utilizar um outro tipo de colection, talvez uma lista, suporta objetos e você consegue iterar sobre ela com mais facilidade.
Acredito que até um map seria interessantes.

P

obrigada drsmachado!
agora funcionou direitinho
=]

Stormqueen1990

Outra solução que evitaria 2 ifs seria ter um contador dentro do while, e no for tu iterar só até o valor do índice ser menor que o contador.
Ou usar uma collection como o drsmachado disse.

Criado 31 de janeiro de 2011
Ultima resposta 31 de jan. de 2011
Respostas 13
Participantes 3