1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Java - NullPointerException

Discussão em 'Programação' iniciada por noitib, 8 de Dezembro de 2007. (Respostas: 9; Visualizações: 1842)

  1. noitib

    noitib Power Member

    É assim, pretendo ler um ficheiro de texto , transformar cada linha num vector de 2 elementos, e o 1º elemento pô-lo num vector, e o segundo noutro.
    Código:
    import java.io.File;
    import java.io.FileWriter;
    import javax.swing.JOptionPane;
    import java.io.FileNotFoundException;
    import java.util.Formatter;
    import java.util.Scanner;
    public class Cficheiro {
        public static void main(String[] args) throws FileNotFoundException{
            Scanner fi=new Scanner(new File("jogadores.txt"));
            String nome="";
            int resp;
            String msg="";
            //Formatter fo=new Formatter(new File("jogadores.txt"));
            String lin;
            String[] pal;
            String[] nomes=null;
            int[] golos = null;
            resp=Integer.parseInt(JOptionPane.showInputDialog("Introduza a sua opção :\n 1-Ler Ficheiro \n 2-Pesquisar \n 3-Marcar"));
            switch (resp){
                
                case 1 : lerFicheiro(fi,nomes,golos); break;
                case 2 : pesquisar(fi); break;
                case 3 : marcar(fi); break;
                
            }
        }
        
        private static void lerFicheiro(Scanner fi, String[] nomes, int[] golos) throws FileNotFoundException{
            String lin;
            String[] pal;
            String msg="";
            
            int cont=0;
            
            while(fi.hasNextLine()){
                lin = fi.nextLine();
                pal = lin.split(":");
                for(int i=0; i<pal.length; i++){
                   nomes[i]=pal[0];
                   golos[i]=Integer.parseInt(pal[1]);
                }
                cont++;
    
            }
            fi.close();
            for (int i=0;i<cont;i++)
                msg+=nomes[i]+" : "+golos[i]+" golos.";
            JOptionPane.showMessageDialog(null,msg);
        }
            
            private static void marcar(Scanner fi) throws FileNotFoundException{
                String lin;
                int cont=0;
                int flag=0;
                String[] pal;
                String msg="";
                String nome=JOptionPane.showInputDialog("Insira o nome do jogador a incrementar os golos : ");
                
                while(fi.hasNextLine()){
                    cont++;
                    lin = fi.nextLine();
                    pal = lin.split(":");
                    for(int p=0; p<pal.length; p++){
                        if (pal[p].equals(nome)){
                            
                            //MARCA UM GOLO!
                        }
                        flag=1;
                    }
                    
                }
                if (flag==0)
                    JOptionPane.showMessageDialog(null,"Jogador não encontrado");
                
            }
            
            private static void pesquisar(Scanner fi) throws FileNotFoundException{
                int flag=0;
                String lin;
                int cont=0,pos=0;
                String[] pal;
                String msg="";
                String nome=JOptionPane.showInputDialog("Insira o nome do jogador a pesquisar : ");
                while(fi.hasNextLine()){
                    cont++;
                    lin = fi.nextLine();
                    pal = lin.split(":");
                    for(int p=0; p<pal.length; p++){
                        if (pal[p].equals(nome)){
                            flag=1;
                            pos=cont;
                        }
                    }
                    
                }
                if (flag==1)
                    JOptionPane.showMessageDialog(null,"O jogador "+nome+" está na posição "+pos+" .");
                else
                    JOptionPane.showMessageDialog(null,"Jogador não encontrado");
            }
        }
    
    o ficheiro tem o seguinte txto

    Código:
    Postiga:20
    Lisandro:10
    Quaresma:13
    Leandro Lima:7
    Compilo, e quando carrega o método lerFicheiro, obtenho o seguinte erro :

    Exception in thread "main" java.lang.NullPointerException
    at Cficheiro.lerFicheiro(Cficheiro.java:39)
    at Cficheiro.main(Cficheiro.java:21)
    Java Result: 1


    Qualquer ajuda será bem-vinda
     
  2. napalm

    napalm Power Member

     
  3. noitib

    noitib Power Member

    Isso onde? substituí no main, e continua com o mesmo erro. :|
     
  4. El_UnO

    El_UnO 1st Folding then Sex

    Vê a linha que dá o erro. Não podes aceder a uma referência que aponta para null, vai-te dar sempre excepção. O napalm queria dizer para inicializares o vector de strings "nomes" com um número de posições pré-definido.

    Código:
    //Formatter fo=new Formatter(new File("jogadores.txt"));
     String lin;
    String[] pal;
    String[] nomes= new String[10];
    Em que "10" é o tamanho do vector. Se queres algo mais dinâmico faz uma ArrayList e vai adicionando :P
     
  5. noitib

    noitib Power Member

    Bah, que noobice tão grande, não dediquei muito tempo a compreender vectores em java :oops:

    Obrigado, daqui a bocado venho cá outra vez pq cheira-me que não vou atinar com a escrita de ficheiro.
     
  6. noitib

    noitib Power Member

    Novo upadte, desta vez com outro erro :neutral:

    Código:
    import java.io.File;
    import java.io.FileWriter;
    import javax.swing.JOptionPane;
    import java.io.FileNotFoundException;
    import java.util.Formatter;
    import java.util.Scanner;
    public class Cficheiro {
        public static void main(String[] args) throws FileNotFoundException{
            Scanner fi=new Scanner(new File("jogadores.txt"));
            String nome="";
            int resp;
            String msg="";
            //Formatter fo=new Formatter(new File("jogadores.txt"));
            String lin;
            String[] pal;
            String[] nomes=new String[4];
            int[] golos = new int[4];
            resp=Integer.parseInt(JOptionPane.showInputDialog("Introduza a sua opção :\n 1-Ler Ficheiro \n 2-Pesquisar \n 3-Marcar"));
            switch (resp){
                
                case 1 : lerFicheiro(fi,nomes,golos); break;
                case 2 : pesquisar(fi,nomes,golos); break;
                case 3 : marcar(fi,nomes,golos); break;
                
            }
        }
        
        private static void lerFicheiro(Scanner fi, String[] nomes, int[] golos) throws FileNotFoundException{
            String lin;
            String[] pal;
            String msg="";
            int resp;
            int cont=0;
            
            while(fi.hasNextLine()){
                lin = fi.nextLine();
                pal = lin.split(":");
                for(int i=0; i<pal.length; i++){
                    nomes[i]=pal[0];
                    if (i==0)
                        msg+=nomes[i]+" : ";
                    golos[i]=Integer.parseInt(pal[1]);
                    if (i==1)
                        msg+=golos[i]+" golos. \n";
                    
                }
                cont++;
                
            }
            fi.close();
            
            JOptionPane.showMessageDialog(null,msg);
            
            resp=Integer.parseInt(JOptionPane.showInputDialog("Introduza a sua opção :\n 1-Ler Ficheiro \n 2-Pesquisar \n 3-Marcar"));
            switch (resp){
                
                case 1 : lerFicheiro(fi,nomes,golos); break;
                case 2 : pesquisar(fi,nomes,golos); break;
                case 3 : marcar(fi,nomes,golos); break;
                
            }
        }
        
        private static void marcar(Scanner fi, String[] nomes, int[] golos) throws FileNotFoundException{
            String lin;
            int cont=0;
            int flag=0;
            String[] pal;
            String msg="";
            String nome=JOptionPane.showInputDialog("Insira o nome do jogador a incrementar os golos : ");
            
            while(fi.hasNextLine()){
                cont++;
                lin = fi.nextLine();
                pal = lin.split(":");
                for(int p=0; p<pal.length; p++){
                    if (pal[p].equals(nome)){
                        
                        //MARCA UM GOLO!
                    }
                    flag=1;
                }
            }
            if (flag==0)
                JOptionPane.showMessageDialog(null,"Jogador não encontrado");
         fi.close();   
        }
        
        private static void pesquisar(Scanner fi, String[] nomes, int[] golos) throws FileNotFoundException{
            int flag=0;
            String lin;
            int cont=0,pos=0;
            String[] pal;
            String msg="";
            String nome=JOptionPane.showInputDialog("Insira o nome do jogador a pesquisar : ");
            while(fi.hasNextLine()){
                cont++;
                lin = fi.nextLine();
                pal = lin.split(":");
                for(int p=0; p<pal.length; p++){
                    if (nomes[p].equals(nome)){
                        flag=1;
                        pos=cont;
                    }
                }
            }
            if (flag==1)
                JOptionPane.showMessageDialog(null,"O jogador "+nome+" está na posição "+pos+" .");
            else
                JOptionPane.showMessageDialog(null,"Jogador não encontrado");
               
            fi.close(); 
        }
    
    }

    Exception in thread "main" java.lang.IllegalStateException: Scanner closed
    at java.util.Scanner.ensureOpen(Scanner.java:1046)
    at java.util.Scanner.findWithinHorizon(Scanner.java:1644)
    at java.util.Scanner.hasNextLine(Scanner.java:1476)
    at Cficheiro.pesquisar(Cficheiro.java:96)
    at Cficheiro.lerFicheiro(Cficheiro.java:58)
    at Cficheiro.main(Cficheiro.java:21)
    Java Result: 1




    Para facilitar a quem tiver a amabilidade de me ajudar:

    linha 21 : case 1 : lerFicheiro(fi,nomes,golos); break;
    linha 58 : case 2 : pesquisar(fi,nomes,golos); break;
    linha 96 : while(fi.hasNextLine()){

    curiosamente, tudo linhas com fi.
     
  7. floyd

    floyd [email protected] Member

    Boas.

    Acho que o problema passa por aqui.

    Cumps.
     
  8. noitib

    noitib Power Member

    Mas não convém fechar o ficheiro de cada vez que é usado?
     
  9. floyd

    floyd [email protected] Member

    Sim, mas tu logo a seguir tás a tentar usar o ficheiro quando ele já está fechado.

     
  10. noitib

    noitib Power Member

    Realmente, omitindo essa instrução, o erro não aparece, mas o resto do programa não corre como o esperado. Obrigado pela dica.
     

Partilhar esta Página