Apostila Caelum fj11

16 respostas
java
G

Olá pessoal! Estou fazendo os exercícios da apostila Caelum - fj11 e no capitulo 9 estou me deparando com o um erro na Classe “ManipuladorDeContas” - Erro: " Não foi encontrado o atributo do tipo Conta na classe “ManipuladorDeContas”. Verifique se o atributo foi criado corretamente.

Fiz todos os passos do capitulo e não estou compreendendo o erro, quando executo a aplicação. Alguém pode me ajudar?

package br.com.caelum.contas;

import br.com.caelum.contas.modelo.Conta;

import br.com.caelum.contas.modelo.ContaCorrente;

import br.com.caelum.contas.modelo.ContaPoupanca;

import br.com.caelum.javafx.api.util.Evento;

public class ManipuladorDeConta {

private Conta conta;

//Demais métodos.

16 Respostas

J

De que forma você está tentando acessar esse atributo para que o erro seja acusado?

G

Quando eu inicio a aplicação, tento cadastrar uma nova conta, ele dá o erro de que não existe um atributo do tipo “Conta”.

J

Entendi, posta o código completo da sua classe ManipuladorDeConta.

G

package br.com.caelum.contas;

import br.com.caelum.contas.modelo.Conta;

import br.com.caelum.contas.modelo.ContaCorrente;

import br.com.caelum.contas.modelo.ContaPoupanca;

import br.com.caelum.javafx.api.util.Evento;

public class ManipuladorDeConta {

private Conta conta;

public void criaConta(Evento evento) {

	String tipo = evento.getSelecionadoNoRadio("tipo");
	if (tipo.equals("Conta	Corrente")) {
		this.conta = new ContaCorrente();
	} else if (tipo.equals("Conta	Poupança")) {
		this.conta = new ContaPoupanca();
	}

	this.conta.setAgencia(evento.getString("agencia"));
	this.conta.setNumero(evento.getInt("numero"));
	this.conta.setTitular(evento.getString("titular"));
}

public void deposita(Evento evento) {
	double valorDigitado = evento.getDouble("valorOperacao");
	this.conta.deposita(valorDigitado);
}

public void saca(Evento evento) {
	double valor = evento.getDouble("valorOperacao");
	this.conta.saca(valor);
}

public	void	transfere(Evento	evento) {
	Conta	destino	=	(Conta)	evento.getSelecionadoNoCombo("destino");
	conta.transfere(evento.getDouble("valorTransferencia"),	destino);

}
}

J

Em qual classe ou parte do código fica a mensagem “deu pau ‘-’ ” ?
Pois essa sua classe não lança nenhuma exception!

V

Eu acredito que seu problema está nessa parte do código:

String tipo = evento.getSelecionadoNoRadio("tipo");
if (tipo.equals("Conta	Corrente")) {
	this.conta = new ContaCorrente();
} else if (tipo.equals("Conta	Poupança")) {
	this.conta = new ContaPoupanca();
}

Crie uma conta corrente de forma direta sem fazer nenhuma verificação para fazer o teste e faça um debug deve método getSelecionadoNoRadio para ver o que ele está retornando na verdade.

G

Acredito que neste .jar que eu importei. Pois é nele que está escrito a parte gráfica do programa usado na apostila https://github.com/fabiomsnet/fj11-contas/blob/master/lib/fj11-lib-contas.jar

J

Entendi, sua classe me parece estar de acordo com a da apostila, com um único detalhe, a sua tem alguns espaços a mais na comparação do tipo de conta.
Faz o seguinge, remova os espaços que estão sobrando nas comparações do tipo da conta e testa.

String tipo = evento.getSelecionadoNoRadio("tipo");
	if (tipo.equals("Conta Corrente")) {
		this.conta = new ContaCorrente();
	} else if (tipo.equals("Conta Poupança")) {
		this.conta = new ContaPoupanca();
	}

Suas classes ContaCorrente e ContaPoupanca estão estendenco a classe Conta corretamente?

G

Não resolveu, na console retorna esse erro ;

Exception in thread JavaFX Application Thread java.lang.RuntimeException: java.lang.reflect.InvocationTargetException

at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1774)

at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1657)

at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)

at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)

at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)

at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)

at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)

at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)

at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)

at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)

at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)

at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)

at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)

at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)

at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)

at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)

at javafx.event.Event.fireEvent(Event.java:198)

at javafx.scene.Node.fireEvent(Node.java:8411)

at javafx.scene.control.Button.fire(Button.java:185)

at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:182)

at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:96)

at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:89)

at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)

at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)

at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)

at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)

at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)

at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)

at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)

at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)

at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)

at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)

at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)

at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)

at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)

at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)

at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)

at javafx.event.Event.fireEvent(Event.java:198)

at javafx.scene.Scene$MouseHandler.process(Scene.java:3757)

at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485)

at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762)

at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494)

at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:394)

at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295)

at java.security.AccessController.doPrivileged(Native Method)

at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$353(GlassViewEventHandler.java:432)

at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389)

at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:431)

at com.sun.glass.ui.View.handleMouseEvent(View.java:555)

at com.sun.glass.ui.View.notifyMouse(View.java:937)

at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)

at com.sun.glass.ui.win.WinApplication.lambda$null$147(WinApplication.java:177)

at java.lang.Thread.run(Unknown Source)

Caused by: java.lang.reflect.InvocationTargetException

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

at java.lang.reflect.Method.invoke(Unknown Source)

at sun.reflect.misc.Trampoline.invoke(Unknown Source)

at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

at java.lang.reflect.Method.invoke(Unknown Source)

at sun.reflect.misc.MethodUtil.invoke(Unknown Source)

at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1769)

 52 more

Caused by: java.lang.RuntimeException: Não foi possível encontrar a conta.

at br.com.caelum.javafx.api.controllers.NovaContaController.buscaConta(NovaContaController.java:74)

at br.com.caelum.javafx.api.controllers.NovaContaController.criaConta(NovaContaController.java:41)

 62 more
J

Chegamos a um erro mais palpável agora!

Caused by: java.lang.RuntimeException: Não foi possível encontrar a conta.
at br.com.caelum.javafx.api.controllers.NovaContaController.buscaConta(NovaContaController.java:74)
at

Ele acusa um erro no controller, método buscaConta na linha 74.
Como está essa classe?

G

Eu não tenho essa Classe. provavelmente ela veio no .jar que eu importei. Será que o erro está ai?

Minhas classes " ContaCorrente e ContaPoupanca estão assim :

package br.com.caelum.contas.modelo;

public class ContaCorrente extends Conta {

public	String	getTipo() {
	return super.getTipo() + " Corrente";
}

@Override
public	void	saca(double	valor) {
				this.saldo	-=	(valor	+	0.10);
}

}

package br.com.caelum.contas.modelo;

public class ContaPoupanca extends Conta {

public	String	getTipo() {
	return super.getTipo() + " Poupança";
}

}

J

Suas classes aparentemente estão corretas, verificou a possibilidade de ter faltado alguma configuração ou algo do tipo, já que algumas das classes estão compiladas no .jar?
Chegou a depurar sua aplicação para ver em que ponto acontece o problema?

G

Jhonatan, eu acabei de revisar todo o conteúdo da apostila e aparentemente o erro vem de alguma classe do .jar, já que todas as minhas classes e métodos estão iguais os da apostila. Quando vc diz “depurar” é o mesmo que debugar?

J

Isso, é a mesma coisa!

Já chegou a fazer?

G

Vou fazer agora.

J

Faz isso, qualquer novidade posta aqui que te ajudo no que eu puder!

Criado 4 de janeiro de 2019
Ultima resposta 4 de jan. de 2019
Respostas 16
Participantes 3