Resolver NullPointerException

Bijel

Suspenso
Código:
package pt.ulusofona.deisi.aedProj2018;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.HashMap;


public class Main{
   
    //Declaração das variáves estáticas
        static  int resultado;
        static ArrayList<Filme>filmes = new ArrayList<>();
        static HashMap<Integer, Filme> filmesRepetidos;
        static HashMap<Integer, ArrayList<Filme>> dic_do_Ano;//dicionário do ano
        static HashMap<Integer,Actor> lista_dos_Atores ;
        static ArrayList<GNC> lista_dos_Generos;
       
    public static void main(String[] args) {
        parseMovieFiles();
        ArrayList<Filme> invocar = getMovies();
         resultado = countMoviesYear(1890);
        System.out.println("O resultado é ->" + resultado);
       
    }
   
   
    public static void parseMovieFiles() {
        //Inicialização de algumas variáveis
        filmesRepetidos = new HashMap<Integer, Filme> ();
        dic_do_Ano = new HashMap<Integer, ArrayList<Filme>>();
        filmes = new ArrayList<Filme>();
        filmes = new ArrayList<Filme>();
        lista_dos_Atores = new HashMap<Integer, Actor>();
        lista_dos_Generos = new ArrayList<GNC>();
               
        String nomeFicheiroFilme = "deisi_movies.txt";
        String nomeFicheiroAtor = "deisi_actors.txt";
        String nomeFicheiroGenero = "deisi_genres.txt";
       
        //Leitura do Ficheiro Filmes
        try {
            File ficheiro = new File(nomeFicheiroFilme);
            Scanner leitorFicheiro = new Scanner(ficheiro);

            // enquanto o ficheiro tiver linhas não-lidas
            while(leitorFicheiro.hasNextLine()) {
                // ler uma linha do ficheiro
                String linha = leitorFicheiro.nextLine();
                // partir a linha no caractere separador
                String dados[] = linha.split(",");
                if (dados.length == 7){
                   
                   
                        int id = Integer.parseInt(dados[0]);
                        String titulo = dados[1];
                        String data = dados[2];
                       
                        String date[] = data.split("-");
                        int ano = Integer.parseInt(date[0]);
                       
                        int orcamento = Integer.parseInt(dados[3]);
                        float duracao = Float.parseFloat(dados[4]);
                        float mediaVotos = Float.parseFloat(dados[5]);
                        int nrVotos = Integer.parseUnsignedInt(dados[6]);
                        HashMap<String,Actor>ator = new HashMap<>();
                        ArrayList<GNC> generos = new ArrayList<>();
                       
                        Filme filme = new Filme(id,titulo, data, orcamento,duracao, mediaVotos, nrVotos, ator, generos);
                       
                    if(filmesRepetidos.get(id)==null){
                        filmesRepetidos.put(id,filme);
                        ArrayList<Filme> lista = new ArrayList<>();
                       
                        if (dic_do_Ano.get(ano) == null) {
                            lista.add(filme);
                            dic_do_Ano.put(ano, lista);
                           
                        } else {
                            lista = dic_do_Ano.get(ano);
                            lista.add(filme);
                            dic_do_Ano.put(ano, lista);
                        }
                        filmes.add(filme);
                    }
                }

            }
       

            leitorFicheiro.close();
            System.out.println("Tamanho dicionario: " + dic_do_Ano.size());
     }
     catch(FileNotFoundException exception) {
           String mensagem = "Erro: o ficheiro " + nomeFicheiroFilme + " nao foi encontrado.";
           System.out.println(mensagem);
   
     }
       
        //Leitura do Ficheiro Atores
        try {
           
            File ficheiro = new File(nomeFicheiroAtor);
            Scanner leitorFicheiro = new Scanner(ficheiro);
         
            // enquanto o ficheiro tiver linhas não-lidas
            while(leitorFicheiro.hasNextLine()) {
                // ler uma linha do ficheiro
                String linha = leitorFicheiro.nextLine();
                // partir a linha no caractere separador
                String dados[] = linha.split(",");
                if (dados.length == 4){
                    int idActor = Integer.parseInt(dados[0]);
                    String nomeActor = dados[1];
                    Boolean sexo = Boolean.parseBoolean(dados[2]);
                    int idFilme = Integer.parseInt(dados[3]);

                    Actor actorTemp = null;
                    //Ja tenho um objecto que represente este actor?
                    //Percorrer a lista de retorno para saber se tem actores repetidos
                    //Compara os objetos da lista de retorno e compara com o objecto que se pretende inserir
                    if(lista_dos_Atores.get(idActor) == null){
                        actorTemp = new Actor(idActor,nomeActor,sexo,idFilme);
                        lista_dos_Atores.put(idActor, actorTemp);
                    }else{
                        actorTemp = lista_dos_Atores.get(idActor);
                    }
                    Filme filme=filmesRepetidos.get(idFilme);
                    if(filme!=null){
                        filme.actores.put(actorTemp.nomeAtor,actorTemp);//adicionar o actor ao filme
                    }

                }
               
            }
           
             leitorFicheiro.close();
        }
       
        catch(FileNotFoundException exception) {
            String mensagem = "Erro: o ficheiro " + nomeFicheiroAtor + " nao foi encontrado.";
            System.out.println(mensagem);
        }
       
    //Leitura do Ficheiro Géneros (GNC)
        try {
           
            File ficheiro = new File(nomeFicheiroGenero);
            Scanner leitorFicheiro = new Scanner(ficheiro);
           
            //enquanto o ficheiro tiver linhas não-lidas
            while(leitorFicheiro.hasNextLine()) {
               
                // ler uma linha do ficheiro
                String linha = leitorFicheiro.nextLine();
                // partir a linha no caractere separador
                String dados[] = linha.split(",");
                if (dados.length == 2){
                    String nomeGenero = dados[0];
                    int idFilmes = Integer.parseInt(dados[1]);
                    GNC gen = new GNC(nomeGenero, idFilmes);
                    lista_dos_Generos.add(gen);

                    //Procurar na lista filmes o idFilme deste objecto
                    Filme filme=filmesRepetidos.get(idFilmes);
                    if(filme!=null){
                        filme.generos.add(gen);//adicionar o actor ao filme
                    }
                }
               
            }
           
              leitorFicheiro.close();
           
        }
   
        catch(FileNotFoundException exception) {
            String mensagem = "Erro: o ficheiro " + nomeFicheiroGenero + " nao foi encontrado.";
            System.out.println(mensagem);
        }
   
    }   
   
    public static ArrayList<Filme> getMovies(){
        return filmes;
       
    }
   
    public static int countMoviesYear(int ano){
       
        int countMoviesYear = dic_do_Ano.get(ano).size();

        return countMoviesYear;   
       
    }
   
   

}
 
Precisamos de mais detalhes. Onde é lançada a excepção? Stacktrace ? Qual o input ? Isto é mesmo a lei do menor esforço.
 
Tens primeiro de testar se a HashMap dicDoAno tem a key que queres antes de pedires o size().

E por favor decide-te no tipo de coding guidelines que queres usar.
Ou tudo inglês (preferivel) ou tudo português
Ou CamelCase (preferivel) ou _
E last not least, não uses static para tudo, cria uma classe, instacia e chama os métodos da classe instanciada.
 
Back
Topo