1
resposta

Mensagem de erro

Boa tarde.

Como posso corrigir a mensagem de erro abaixo?

+++++++++++++++++++++++ Digite o nome da série para a busca

game of thrones DadosSerie[titulo=null, totalTemporadas=null, avaliacao=null] 2023-12-11T15:37:33.289-03:00 INFO 9624 --- [ main] .s.b.a.l.ConditionEvaluationReportLogger :

Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. 2023-12-11T15:37:33.307-03:00 ERROR 9624 --- [ main] o.s.boot.SpringApplication : Application run failed

java.lang.IllegalStateException: Failed to execute CommandLineRunner at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:774) ~[spring-boot-3.1.5.jar:3.1.5] at org.springframework.boot.SpringApplication.lambda$callRunners$3(SpringApplication.java:755) ~[spring-boot-3.1.5.jar:3.1.5] at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183) ~[na:na] at java.base/java.util.stream.SortedOps$SizedRefSortingSink.end(SortedOps.java:357) ~[na:na] at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:510) ~[na:na] at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499) ~[na:na] at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150) ~[na:na] at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173) ~[na:na] at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:na] at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596) ~[na:na] at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:750) ~[spring-boot-3.1.5.jar:3.1.5] at org.springframework.boot.SpringApplication.run(SpringApplication.java:323) ~[spring-boot-3.1.5.jar:3.1.5] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1306) ~[spring-boot-3.1.5.jar:3.1.5] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1295) ~[spring-boot-3.1.5.jar:3.1.5] at br.com.alura.screenmatch.ScreenmatchApplication.main(ScreenmatchApplication.java:16) ~[classes/:na] Caused by: java.lang.NullPointerException: Cannot invoke "java.lang.Integer.intValue()" because the return value of "br.com.alura.screenmatch.model.DadosSerie.totalTemporadas()" is null at br.com.alura.screenmatch.principal.Principal.exibeMenu(Principal.java:29) ~[classes/:na] at br.com.alura.screenmatch.ScreenmatchApplication.run(ScreenmatchApplication.java:22) ~[classes/:na] at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:771) ~[spring-boot-3.1.5.jar:3.1.5] ... 14 common frames omitted

Process finished with exit code 1

1 resposta

E aí, Nemézio, tudo bom?

Então, o bug que tá dando é uma exceção do tipo java.lang.NullPointerException. Isso quer dizer que você tá tentando acessar um método ou uma propriedade de um objeto que tá valendo nada (null). Vamo dar uma olhada no pedaço do seu código que importa:

Caused by: java.lang.NullPointerException: Cannot invoke "java.lang.Integer.intValue()" because the return value of "br.com.alura.screenmatch.model.DadosSerie.totalTemporadas()" is null
    at br.com.alura.screenmatch.principal.Principal.exibeMenu(Principal.java:29) ~[classes/:na]
    at br.com.alura.screenmatch.ScreenmatchApplication.run(ScreenmatchApplication.java:22) ~[classes/:na]
    at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:771) ~[spring-boot-3.1.5.jar:3.1.5]
    ... 14 common frames omitted

A zica tá rolando na linha 29 do arquivo Principal.java, na hora de chamar o método totalTemporadas() da classe DadosSerie. Esse método tá voltando null, e cê tá tentando chamar o intValue() num objeto que não existe.

Pra consertar, tu precisa garantir que o totalTemporadas() nunca retorne null. Olha duas maneiras de resolver isso:

  1. Checar se é nulo antes de chamar o método: Dá um tapa no teu código onde cê chama o totalTemporadas() e confere se não é nulo antes de chamar o intValue(). Se for nulo, pode definir um valor padrão ou lançar uma exceção, dependendo do que cê precisar.

    Exemplo:

    Integer totalTemporadas = dadosSerie.totalTemporadas();
    if (totalTemporadas != null) {
        // Faz algo com totalTemporadas.intValue()
    } else {
        // Lida com o caso de totalTemporadas ser nulo
    }
    

    Garante que o método totalTemporadas() na classe DadosSerie sempre retorne um valor não nulo. Às vezes, isso pode precisar de uma mudança na implementação da classe DadosSerie.

    public class DadosSerie {
        // Outros métodos e propriedades
    
        public Integer totalTemporadas() {
            // Garante que o valor nunca seja nulo
            return this.totalTemporadas != null ? this.totalTemporadas : 0;
        }
    

É isso! Espero que uma dessas soluções resolva o pepino que tá rolando aí.