Solucionado (ver solução)
Solucionado
(ver solução)
8
respostas

Aula 6 - vídeo explicativo

Pessoal, tentei acompanhar as explicações do vídeo da aula 6 do curso java II, mas está dando um erro que não consigo resolver. Alguém pode me ajudar? Reproduzo abaixo as 3 classes do exercício. Nas classes Conta e TestaConta, nenhum erro. O problema acontece na classe SaldoInsuficienteException, vejam abaixo:

Conta.java

public class Conta { private double saldo; private String titular; private int agencia; private int numero;

public void saca(double valor) throws Exception { if(saldo >= valor) { this.saldo -= valor; } else { throw new SaldoInsuficienteException(saldo); } }

public void deposita(double valor) { this.saldo += valor; }

public double getSaldo() { return saldo; }

}

TestaConta.java

public class TestaConta { public static void main(String[] args) {

Conta joao = new Conta(); joao.deposita(50.0);

try { joao.saca(100.0); } catch(SaldoInsuficienteException e) { System.out.println("Saldo está insuficiente: " + e.getSaldoAtual()); } catch(Exception e) { System.out.println("Um outro erro qualquer!"); }

System.out.println(joao.getSaldo()); }

}

SaldoInsuficienteException.java

public class SaldoInsuficienteException extends RuntimeException {

private final double saldoAtual;

public SaldoInsuficienteException(double SaldoAtual) { Super("Saldo insuficiente: " + saldoAtual); this.saldoAtual = saldoAtual; }

public double getSaldoAtual() { return saldoAtual; }

}

Erros apresentados:

na primeira linha:

Multiple markers at this line - The type java.io.ObjectInputStream cannot be resolved. It is indirectly referenced from required .class files - The type java.io.ObjectInputStream cannot be resolved. It is indirectly referenced from required .class files - The serializable class SaldoInsuficienteException does not declare a static final serialVersionUID field of type long

na linha de chamada do Super:

The method Super(String) is undefined for the type SaldoInsuficienteException

8 respostas

Olá Mario.

Quanto ao serialVersionUID a mensagem é apenas um warning, informando que este não foi declarado, mas isto não é obrigatório.

Já quanto ao construtor, identifiquei duas necessidades de ajuste conforme o código abaixo:

    public SaldoInsuficienteException(double saldoAtual) {
    super("Saldo insuficiente: " + saldoAtual);
    this.saldoAtual = saldoAtual;
    }

em seu código, o parâmetro está com letra maiúscula (SaldoAtual) e você utiliza o mesmo internamente com letra minúscula (saldoAtual), que não vai ser identificado, gerando erro no código. Outro ajuste é a chamada do super(), que também deve ser feito com letra minúscula. Faça os ajustes e diga se foi resolvido. Espero ter ajudado. Abraço.

Harley,

Realmente o super estava maiúsculo e quando modifiquei o erro desapareceu. Já saldoAtual só tem a primeira letra maiúscula no método getSaldoAtual. No método getSaldoAtual acredito que tenha que ser maiúsculo mesmo, certo? Agora só apresenta erro na primeira linha da classe SaldoInsuficienteException.java:

Multiple markers at this line - The type java.io.ObjectInputStream cannot be resolved. It is indirectly referenced from required .class files - The serializable class SaldoInsuficienteException does not declare a static final serialVersionUID field of type long - The type java.io.ObjectInputStream cannot be resolved. It is indirectly referenced from required .class files

Consegue reproduzir este erro? Pode me ajudar?

Mario,

No meu ambiente não tive esta mensagem do java.io.ObjectInputStream, somente a do serialVersionUID, que você pode resolver declarando a seguinte linha no seu código da Exception, juntamente com o atributo saldoAtual.

    private static final long serialVersionUID = 1L;

Veja se resolve.

Harley,

fazendo a declaração do serialVersionUID, este erro o compilador deixou de apontar, mas o ObjectInputStream continua lá:

Multiple markers at this line - The type java.io.ObjectInputStream cannot be resolved. It is indirectly referenced from required .class files - The type java.io.ObjectInputStream cannot be resolved. It is indirectly referenced from required .class files

Alguma sugestão para resolver este problema? Não tenho muita experiência com Java, estou aprendendo agora. Grato, Mario

Pelo que pesquisei na internet, esta situação pode estar relacionada com a versão do Java.

Vi relatos de que este erro pode ocorrer com a versão do java 1.8.0_91

Estou usando aqui a 1.8.0_92 e não tive esta situação. Qual a versão que você está usando?

Harley, Eu estou usando a versão 1.8.0_101 do Java e a minha versão do Windows é 10. Procurei pelo erro na internet em foruns, disseram para excluir a JRE em "Installed JREs" e depois incluir novamente. Tentei isso e não funcionou. Também baixei a versão 1.8.0_102, fiz a JRE do eclipse visualizar a pasta 1.8.0_102, mas também não funcionou. Não sei mais o que fazer... Você tem mais alguma sugestão?

Verifique se no Path está com a indicação do caminho com a jdk correta.

Veja também no JAVA no Painel de Controle se está com a JRE indicada corretamente.

Essa mensagem é só um warning ou não está deixando você compilar e executar o sistema?

solução!

Harley, Tratando de outro assunto consegui descobrir a origem do problema. Eu estava usando a versão "Eclipse IDE for Java Developers" . Num outro tópico, a Joviane Fernandes Jardim me sugeriu usar a versão Eclipse IDE for Java EE Developers (Neon) e isso resolveu os problemas que eu estava enfrentando. Obrigado Harley e Joviane, pelo tempo dispensado para me ajudar. Abraço, Mario