Sou novo na programação em Java e não estou entendendo este erro

9 respostas
D

[b][color=blue][/color][size=24]O erro é o seguinte:

Exception in thread main java.lang.NullPointerException

at java.awt.Container.addImpl(Unknown Source)

at java.awt.Container.add(Unknown Source)

at gui.Modulo.(Modulo.java:31)

at gui.Modulo.main(Modulo.java:48)

Meu código é o seguinte:

package gui;

import java.awt.Container;

import java.awt.GridLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;
import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JOptionPane;

import javax.swing.JTextField;

@SuppressWarnings(“serial”)
public class Modulo extends JFrame {

JButton btnCalcular;
JTextField dividendo, divisor;
JLabel lblDividendo, lblDivisor, lblResultado, lblExplicacao;

public Modulo() {
	super("Módulo");

	btnCalcular = new JButton("Calcular");
	btnCalcular.addActionListener(new btnCalcularListener());

	Container c = getContentPane();
	

	c.setLayout(new GridLayout(3, 3));
	c.add(lblDividendo);
	c.add(dividendo);
	c.add(lblDivisor);
	c.add(divisor);
	c.add(lblResultado);
	c.add(lblExplicacao);
	c.add(btnCalcular);

	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	setSize(500, 150);
	setVisible(true);
}

/**
 * @param args
 */
public static void main(String[] args) {
	new Modulo();

}

class btnCalcularListener implements ActionListener {

	

	public void actionPerformed(ActionEvent e) {
		int res;
		int i = 1;
		

		try

		{

			

			// Para encontrar divisor quesor
			// seja inteiro, isto é, sem casas
			// decimais

			if ( Integer.parseInt(divisor.getText()) == 0) {
				JOptionPane
						.showMessageDialog(null,
								"Digite um valor diferente de zero para o divisor.");
			} else {

				while (Integer.parseInt(divisor.getText()) * i <= Integer.parseInt(dividendo.getText())) {

					// ' divisor i = mult
					// ' 2 X 1 = 2
					// ' 2 X 2 = 4
					// ' 2 X 3 = 6
					i += 1;
					// 'i = i + 1
				}

				// i = i - 1;
				i -= 1;
				res = (Integer.parseInt(dividendo.getText()) % (Integer.parseInt(divisor.getText())));

				lblResultado.setText("O módulo entre " + dividendo + " e "
						+ divisor + " é: " + res + ".");

				lblExplicacao.setText("Porque " + dividendo
						+ " dividido por " + divisor + " é igual a " + i
						+ " e sobra " + res + ".");
			}
		}

		catch (Exception ex)

		{
			JOptionPane.showMessageDialog(null, "Erro!");

		}

	}

}

}[/size]

9 Respostas

pmlm

http://guj.com.br/java/50115-voce-e-novo-no-guj-vai-criar-um-topico-e-colar-seu-codigo-fonte-leia-aqui-antes-por-favor

Yago_Ernandes

o erro java.lang.NullPointerException acontece quando vc tenta usar alguma coisa sem ter iniciado o mesmo

jhaga
  1. Coloque seu código SEMPRE dentro das tags [ code ][ /code ]
  2. O erro está na “iniciando” na linha logo após o “setLayout”
  3. Ao invés de:
JButton btnCalcular; 
JTextField dividendo, divisor; 
JLabel lblDividendo, lblDivisor, lblResultado, lblExplicacao;

Use:

JButton btnCalcular;
	JTextField dividendo = new JTextField();
	JTextField divisor = new JTextField();
	JLabel lblDividendo = new JLabel("Dividendo");
	JLabel lblResultado = new JLabel("Resultado");
	JLabel lblDivisor = new JLabel("Divisor");
	JLabel lblExplicacao = new JLabel("Explicação");
drsmachado

Caramba!
É novo em programação e está cego, confere?

RiQuInHo_

eu que to cego aqui, olha o tamanho que o cara coloca da fonte… fala sério hein carinha.

drsmachado

Groovin:
Da uma olhada neste site amigo.
Tem muita coisa interessante sobre Java.
Me ajudou bastante.

Spam detected!

D

package gui;

import java.awt.BorderLayout;

import java.awt.EventQueue;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;
import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

import javax.swing.JTextField;

import javax.swing.border.EmptyBorder;

public class janModulo extends JFrame {

private JPanel contentPane;
private JTextField txtDividendo;
private JTextField txtDivisor;

/**
 * Launch the application.
 */
public static void main(String[] args) {
	EventQueue.invokeLater(new Runnable() {
		public void run() {
			try {
				janModulo frame = new janModulo();
				frame.setVisible(true);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	});
}

/**
 * Create the frame.
 */
public janModulo() {
	setTitle("M\u00F3dulo");
	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	setBounds(100, 100, 450, 300);
	contentPane = new JPanel();
	contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
	contentPane.setLayout(new BorderLayout(0, 0));
	setContentPane(contentPane);
	
	JPanel panel = new JPanel();
	contentPane.add(panel, BorderLayout.CENTER);
	panel.setLayout(null);
	
	JLabel lblDividendo = new JLabel("Dividendo:");
	lblDividendo.setBounds(10, 24, 75, 14);
	panel.add(lblDividendo);
	
	JLabel lblDivisor = new JLabel("Divisor:");
	lblDivisor.setBounds(10, 57, 61, 14);
	panel.add(lblDivisor);
	
	txtDividendo = new JTextField();
	txtDividendo.setBounds(95, 21, 86, 20);
	panel.add(txtDividendo);
	txtDividendo.setColumns(10);
	
	txtDivisor = new JTextField();
	txtDivisor.setBounds(95, 54, 86, 20);
	panel.add(txtDivisor);
	txtDivisor.setColumns(10);
	
	final JLabel lblResultado = new JLabel("Resultado:");
	lblResultado.setBounds(10, 98, 392, 14);
	panel.add(lblResultado);
	
	final JLabel lblExplicacao = new JLabel("Explica\u00E7\u00E3o:");
	lblExplicacao.setBounds(10, 135, 404, 14);
	panel.add(lblExplicacao);
	
	JButton btnCalcular = new JButton("Calcular");
	btnCalcular.addActionListener(new ActionListener() {
		public void actionPerformed(ActionEvent arg0) {
		

			try {
				int dividendo = Integer.parseInt(txtDividendo.getText());
				int divisor = Integer.parseInt(txtDivisor.getText());

				int res;
				int i = 1;

				if (divisor == 0) {
					JOptionPane
							.showMessageDialog(null,
									"Digite um valor diferente de zero para o divisor.");
				} else {

					while (divisor * i <= dividendo) {

						i += 1;

					}

					i -= 1;
					res = (dividendo % divisor);
					
					

					lblResultado.setText("O módulo entre " + dividendo
							+ " e " + divisor + " é: " + res + ".");

					lblExplicacao.setText("Porque " + dividendo
							+ " dividido por " + divisor + " é igual a "
							+ i + " e sobra " + res + ".");
				}
			}

			catch (Exception ex)

			{
				JOptionPane.showMessageDialog(null, "Erro!");

			}

		}

		
	});
	btnCalcular.setBounds(175, 161, 89, 23);
	panel.add(btnCalcular);
}

}

S

Por favor, antes de postar essa montanha de código, escreva (sem espaço) no topo e no pé da montanha escreva

douglas_arantes
package gui; 

import java.awt.BorderLayout; 
import java.awt.EventQueue; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JOptionPane; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 
import javax.swing.border.EmptyBorder; 

public class janModulo extends JFrame { 

private JPanel contentPane; 
private JTextField txtDividendo; 
private JTextField txtDivisor; 

/** 
* Launch the application. 
*/ 
public static void main(String[] args) { 
EventQueue.invokeLater(new Runnable() { 
public void run() { 
try { 
janModulo frame = new janModulo(); 
frame.setVisible(true); 
} catch (Exception e) { 
e.printStackTrace(); 
} 
} 
}); 
} 

/** 
* Create the frame. 
*/ 
public janModulo() { 
setTitle("M\u00F3dulo"); 
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
setBounds(100, 100, 450, 300); 
contentPane = new JPanel(); 
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 
contentPane.setLayout(new BorderLayout(0, 0)); 
setContentPane(contentPane); 

JPanel panel = new JPanel(); 
contentPane.add(panel, BorderLayout.CENTER); 
panel.setLayout(null); 

JLabel lblDividendo = new JLabel("Dividendo:"); 
lblDividendo.setBounds(10, 24, 75, 14); 
panel.add(lblDividendo); 

JLabel lblDivisor = new JLabel("Divisor:"); 
lblDivisor.setBounds(10, 57, 61, 14); 
panel.add(lblDivisor); 

txtDividendo = new JTextField(); 
txtDividendo.setBounds(95, 21, 86, 20); 
panel.add(txtDividendo); 
txtDividendo.setColumns(10); 

txtDivisor = new JTextField(); 
txtDivisor.setBounds(95, 54, 86, 20); 
panel.add(txtDivisor); 
txtDivisor.setColumns(10); 

final JLabel lblResultado = new JLabel("Resultado:"); 
lblResultado.setBounds(10, 98, 392, 14); 
panel.add(lblResultado); 

final JLabel lblExplicacao = new JLabel("Explica\u00E7\u00E3o:"); 
lblExplicacao.setBounds(10, 135, 404, 14); 
panel.add(lblExplicacao); 

JButton btnCalcular = new JButton("Calcular"); 
btnCalcular.addActionListener(new ActionListener() { 
public void actionPerformed(ActionEvent arg0) { 


try { 
int dividendo = Integer.parseInt(txtDividendo.getText()); 
int divisor = Integer.parseInt(txtDivisor.getText()); 

int res; 
int i = 1; 

if (divisor == 0) { 
JOptionPane 
.showMessageDialog(null, 
"Digite um valor diferente de zero para o divisor."); 
} else { 

while (divisor * i <= dividendo) { 

i += 1; 

} 

i -= 1; 
res = (dividendo % divisor); 



lblResultado.setText("O módulo entre " + dividendo 
+ " e " + divisor + " é: " + res + "."); 

lblExplicacao.setText("Porque " + dividendo 
+ " dividido por " + divisor + " é igual a " 
+ i + " e sobra " + res + "."); 
} 
} 

catch (Exception ex) 

{ 
JOptionPane.showMessageDialog(null, "Erro!"); 

} 

} 


}); 
btnCalcular.setBounds(175, 161, 89, 23); 
panel.add(btnCalcular); 
} 
}

Da próxima vez, utilize as tags code, como os colegas acime informaram, isso facilita e muito a leitura do código.

Criado 3 de julho de 2012
Ultima resposta 5 de jul. de 2012
Respostas 9
Participantes 8