1
resposta

[Dúvida] Erro Exception in thread "main" java.lang.IllegalArgumentException: Não encontrou items.

Eu estava fazendo a aula da Alura pratica JAVA 1 e 2, Mas meu codigo apresenta o erro de: Exception in thread "main" java.lang.IllegalArgumentException: Não encontrou items. at JsonParser.parse(JsonParser.java:17) at App.main(App.java:24)

E meu codigo esta igual o da aula, menos o link, pois os links deles estao fora do ar, entao eu recriei o link do Json exatamente igual eles usam.

O main:

import java.io.InputStream;
import java.net.URI;
import java.net.URL;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.List;
import java.util.Map;

public class App {
    public static void main(String[] args) throws Exception {
        // Fazer conexao HTTP e buscar os top 250 filmes
        String url = "https://raw.githubusercontent.com/Alexsanderro/ALURA-STICKERS/master/json/CodigoFonte.json";
        URI endereco = URI.create(url);
        var client = HttpClient.newHttpClient();
        var request = HttpRequest.newBuilder(endereco).GET().build();
        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        String body = response.body();

        // pegar so os dados que interessam (titulo, poster, classificacao)

        var parser = new JsonParser();
        List<Map<String, String>> listaDeFilmes = parser.parse(body);


        // exibir e manipular os dados

        for (Map<String, String> filme : listaDeFilmes) {

            String urlImagem = filme.get("image");
            String titulo = filme.get("title");

            InputStream inputStream = new URL(urlImagem).openStream();
            String nomeArquivo = titulo + ".png";

            var geradora = new GeradoraDeFigurinhas();
            geradora.cria(inputStream, nomeArquivo);

            System.out.println("Titulo: " + titulo);
            System.out.println("\u001b[34mClassificacao: \u001b[m" + filme.get("imDbRating"));
            String estrela = filme.get("imDbRating");
            double valor = 0;
            try {
                valor = Double.parseDouble(estrela);
            } catch (NumberFormatException ex){
                ex.printStackTrace();
            }

            int valorInteiro = (int)valor;

            for (int i = 0; i < valorInteiro; i++) {
                System.out.print("\uD83D\uDC99");
            }
            System.out.println("\n");

        }
    }
}

A classe para gerar uma imagem com descricao diferente:

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.InputStream;

public class GeradoraDeFigurinhas {

    public void cria(InputStream inputStream, String nomeArquivo) throws Exception {

        // leitura da imagem
        //InputStream inputStream = new URL("https://m.media-amazon.com/images/M/MV5BNDE3ODcxYzMtY2YzZC00NmNlLWJiNDMtZDViZWM2MzIxZDYwXkEyXkFqcGdeQXVyNjAwNDUxODI@._V1_FMjpg_UX1000_.jpg").openStream();
        //InputStream inputStream = new FileInputStream("entrada/filme.jpg");
        BufferedImage imagemOriginal = ImageIO.read(inputStream);

        // cria nova imagem em memoria com transparencia e com tamanho novo
        int largura = imagemOriginal.getWidth();
        int altura = imagemOriginal.getHeight();
        int novaAltura = altura + 200;
        BufferedImage novaImagem = new BufferedImage(largura, novaAltura, BufferedImage.TRANSLUCENT);

        // copiar a imagem original para nova imagem (em memoria)
        Graphics2D graphics = (Graphics2D) novaImagem.getGraphics();
        graphics.drawImage(imagemOriginal, 0 , 0, null);

        // configurar a fonte
        var fonte = new Font(Font.SANS_SERIF, Font.BOLD, 64);
        graphics.setColor(Color.YELLOW);
        graphics.setFont(fonte);

        // escrever uuma frase na nova imagem
        graphics.drawString("TOPZERA", 350, novaAltura - 100);

        // escrever a nova imagem em um arquivo
        File diretorio = new File("C:/Users/Alexs/IdeaProjects/untitled/saida");
        if (diretorio.mkdir()) {
            System.out.println("Diretorio criado");
        } else {
            System.out.println("Falha ao criar diretorio ou diretorio ja existente");
        }
        ImageIO.write(novaImagem, "png", new File(nomeArquivo));

    }

}

erro:

Exception in thread "main" java.lang.IllegalArgumentException: Não encontrou items.
    at JsonParser.parse(JsonParser.java:17)
    at App.main(App.java:24)

Alguem poderia me ajudar?

1 resposta

Olá, Alexsander! Tudo bem?

O erro IllegalArgumentException que você está recebendo indica que o método parse() não conseguiu encontrar os itens que estava esperando no JSON que você forneceu.

Mas tenho uma dúvida no seu código, referente a classe JsonParser. Você não tem nenhuma importação referente alguma classe relacionada a ela, então o seu problema pode estar relacionado a essa classe, então, preciso de mais informações referente a ela, você implementou ela em outro arquivo ou é proveniente de alguma biblioteca?

No mais, gostaria que falasse qual a aula ou curso está realizando esse projeto em questão, quanto mais informações melhor poderei lhe ajudar.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software