Ajuda com transição de JFrame para JPanel

1 resposta
java
G

Olá, td bem?
Estou iniciando na cadeira de Programação Orientada à Objetos, entretanto começamos a ver Interfaces Gráficas em Java, e na última aula acabei criando um projeto para testar essas funcionalidades. Já possuo todo a estrutura visão modelada, mas quando crio um evento com o ActionListener, recebo uma exceção NullPointerException. Tenho menos de 6 meses com Java, mas quero entender melhor o seu funcionamento. Se puderem dar sugestões de como buscar as melhores práticas, agradeço.

PS.: Utilizo como plataforma o Eclipse, com o pacote Window Builder.

Código:

JMenuItem mntmCadastrar = new JMenuItem("Cadastrar");
		mntmCadastrar.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Trocar da JanelaPrincipal para a JanelaCadastro
				try {
					if (janelaCadastro.equals(null)){
						janelaCadastro = new JanelaCadastro();
						janelaCadastro.setVisible(true);
					} else if (janelaCadastro.isVisible()) {
						janelaCadastro.setVisible(false);
					} else {
						janelaCadastro.setVisible(true);
					}
				} catch (Exception e2) {
					// TODO: handle exception
					System.out.println("Exceção na troca de telas: "+e2);
				}
			}
		});
		mnArquivo.add(mntmCadastrar);

Ao clicar no botão, este é o retorno:
Exceção na troca de telas: java.lang.NullPointerException

1 Resposta

TerraSkilll

Quando for exibir um erro, exiba o stacktrace completo, não só o nome da exceção. Algo assim:

} catch (Exception e2) {
   e2.printStackTrace();
}

Assim fica mais fácil você saber qual a mensagem de erro completa e em que linha a exceção ocorreu e que chamadas de métodos foram feitas. Isso ajuda muito no debug.

Dito isso, onde está declarada a variável janelaCadastro ? Ela só é usada nesse método? E por que você faz a comparação com equals(null) ? Pois aparentemente essa comparação está sempre retornando false e a janela não está sendo criada (o que daria exceção no setVisible()). Teste com uma comparação com ==, algo assim:

try {
   if (janelaCadastro == null){
     janelaCadastro = new JanelaCadastro();
     janelaCadastro.setVisible(true);

Abraço.

Criado 31 de outubro de 2016
Ultima resposta 31 de out. de 2016
Respostas 1
Participantes 2