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

ValorInvalidoException - erro: Multiple markers at this line

Pessoal,

Quando criei a exception ValorInvalidoException, pedida no exercício 10, não consigo compilar. A interface eclipse aponta o seguinte erro:

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

Como sugestão a eclipse diz para configurar o "Java Build Path": Configure Java Build Path Até mudei de JRE System Library [jre1.8.0_101] para JRE System Library [jre1.8.0_102] (instalei a versão 102 só para ver se resolvia o problema), mas o problema persiste. Alguém tem uma ideia do que fazer? Deveria eu usar outra interface? Na declaração da exception ValorInvalidoException, se eu tirar a parte "extends RuntimeException" o erro desaparece.

17 respostas

Parece que o erro está relacionado com outra coisa (não com a exceção criada).

The type java.io.ObjectInputStream cannot be resolved

Se possível, cole o código aqui.

Gabriel, segue abaixo o código. Obrigado por me ajudar:

Classe Conta

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); throw new IllegalArgumentException(); } }

public void deposita(double valor) { if(valor < 0) { //throw new IllegalArgumentException("Você tentou depositar" //+ " um valor negativo"); throw new ValorInvalidoException(); } else { this.saldo += valor; } }

public double getSaldo() { return saldo; } }

Classe TestaConta

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(RuntimeException e) { System.out.println("Saldo está insuficiente: "); } catch(Exception e) { System.out.println("Um outro erro qualquer!"); }

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

joao.deposita(0.0);

}

}

Classe TestaDeposita

public class TestaDeposita { public static void main(String[] args) { Conta cp = new Conta(); try { cp.deposita(-100); //} catch (IllegalArgumentException e) { // System.out.println(e.getMessage()); } catch (ValorInvalidoException e) { System.out.println("Valor não pode ser negativo"); }

} }

Classe ValorInvalidoException (onde está o erro)

public class ValorInvalidoException extends RuntimeException {

}

Consegui executar o programa do prompt do DOS, sem usar a interface eclipse, o que indica que o problema é com a interface. Mas e agora, troco de interface?

Mario,

Se você copiar o código depois que clicar em "inserir código" , e colocar o código no local delimitado fica mais fácil para verificarmos.

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);
            throw new IllegalArgumentException();
        }
    }

    public void deposita(double valor) {
        if(valor < 0) {
            //throw new IllegalArgumentException("Você tentou depositar" 
            //+ " um valor negativo");
            throw new ValorInvalidoException();
        } else {
            this.saldo += valor;            
        }
    }

    public double getSaldo() {
        return saldo;
    }
}

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(RuntimeException e) {
            System.out.println("Saldo está insuficiente: ");
        }
        catch(Exception e) {
            System.out.println("Um outro erro qualquer!");
        }

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

        joao.deposita(0.0);

    }

}

public class TestaDeposita {
    public static void main(String[] args) {
        Conta cp = new Conta();
        try {
            cp.deposita(-100);
        //} catch (IllegalArgumentException e) {
        //    System.out.println(e.getMessage());
        } catch (ValorInvalidoException e) {
            System.out.println("Valor não pode ser negativo");
        }

    }
}

public class ValorInvalidoException extends RuntimeException {

}

Mario,

Copiei o seu código no ECLIPSE, rodei e não deu erro.

Qual opção você está usando para compilar?

Rodei o TestaConta e o TestaDeposita e funcionou corretamente.

Lembre-se que você tem que executar com RUN AS -> JAVA APPLICATION.

Gabriel,

O eclipse já aponta erro na primeira linha da classe ValorInvalidoException. Quando eu executo utilizando RUN AS -> JAVA APPLICATION, já aponta: Errors exist in required project Proceed with launch? Se eu insistir em executar, aponta o erro: Exception in thread "main" java.lang.Error: Unresolved compilation problem: The type java.io.ObjectInputStream cannot be resolved. It is indirectly referenced from required .class files

at ValorInvalidoException.(ValorInvalidoException.java:1) at Conta.deposita(Conta.java:23) at TestaDeposita.main(TestaDeposita.java:6)

Eu consegui fazer a execução do mesmo fonte a partir do prompt do DOS, utilizando: javac *.java java TestaDeposita

Não entendo. Será que há duas versões do JAVA instaladas?

Vá no prompt e digite java -version para visualizar a versão.

Depois no ECLIPSE, verifique qual a versão está sendo usada (WINDOWS -> PREFERENCES -> INSTALLED JREs.

Verifique se o prompt e o Eclipse estão usando a mesma versão.

Gabriel, quando o problema apareceu eu trabalhava na versão 1.8.0_101. Na tentativa de resolvê-lo eu instalei a versão 1.8.0_102, ma como você pode ver nas checagens abaixo, está tudo configurado para a versão 102.

Vá no prompt e digite java -version para visualizar a versão: java version "1.8.0_102" java (TM) SE Runtime Environment (build 1.8.0_102-b14) Data HotSpot(TM) 64-bit Server VM (build 25.102-b14, mixed mode)

Depois no ECLIPSE, verifique qual a versão está sendo usada (WINDOWS -> PREFERENCES -> INSTALLED JREs. jre 1.8.0_102

Gabriel, hoje ligando o meu computador, foi solicitado a atualização do java. Agora estou com jdk1.8.0_102 e jre1.8.0_111. Isso pode influenciar no erro?

Veja o arquivo eclipse.ini e cole o conteúdo aqui. Precisamos verificar se está corretamente configurado.

O conteúdo é:

-startup plugins/org.eclipse.equinox.launcher_1.1.0.v20100507.jar --launcher.library plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.1.R36x_v20100810 -product org.eclipse.epp.package.java.product --launcher.defaultAction openFile --launcher.XXMaxPermSize 256M -showsplash org.eclipse.platform --launcher.XXMaxPermSize 256m --launcher.defaultAction openFile -vmargs -Dosgi.requiredJavaVersion=1.5 -Xms40m -Xmx384m

O Eclipse está abrindo normalmente ? Só não consegue compilar o código? É isto?

Sim, está abrindo normalmente. O problema é compilar o código

vá em painel de controle, remover programas e procure pelas versões antigas remove as instalações anteriores deixe só as novas atualizações eu tive um problema quando as versões novas eram instaladas não sobrescreviam as antigas dai sempre dava erros ao compilar, também só conseguia pelo prompt.

solução!

Gabriel e André, 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 Gabriel e André e Joviane, pelo tempo dispensado para me ajudar. Abraço, Mario