Java.lang.NullPointerException [RESOLVIDO]

2 respostas
M

estou a tentar registar um utilizador e dá erro java.lang.NullPointerException e não consigo descobrir porquê

deixo o erro e o codigo das classes

Exception in thread "main" java.lang.NullPointerException
	at sge5f.SGE.MenuPrincipalFuncionarios_Utilizadores_Inserir_Docente_Responsavel(SGE.java:297)
	at sge5f.SGE.MenuPrincipalFuncionarios_utilizadores(SGE.java:209)
	at sge5f.SGE.MenuPrincipalFuncionarios(SGE.java:176)
	at sge5f.SGE.Login(SGE.java:130)
	at sge5f.SGE.opcaoEntradaDados(SGE.java:95)
	at sge5f.SGE.main(SGE.java:19)
public static void MenuPrincipalFuncionarios_Utilizadores_Inserir_Docente_Responsavel(Funcionarios _funcionarios)
 {	
		//valida atraves do ficheiro utilizadores, pois só assim verifica se o BI do novo utilizador ja se encontra registado no sistema
		ArrayList <Utilizadores> consultaUtilizadores=new ArrayList <Utilizadores>();
		consultaUtilizadores=(ArrayList<Utilizadores>) trataf.LeFicheiro("Utilizadores.dat");
		
		//para actualizar caso se adicione utilizador
		 ArrayList <DocenteResponsavel> consultaDocenteResponsavel =new ArrayList <DocenteResponsavel>();
		 consultaDocenteResponsavel=(ArrayList<DocenteResponsavel>) trataf.LeFicheiro("DocenteResponsavel.dat");
			
		 //Novo array que vou utilizar para adicionar o novo utilizador
		 ArrayList <Utilizadores> consultaUtilizadoresAux=new ArrayList <Utilizadores>();
		 consultaUtilizadoresAux=null;
			
		 if(consultaUtilizadores==null || consultaUtilizadores.size()==0 )
			 menu.M_Aviso("Não existem Utilizadores Registados!");
		 else
		 {
			 DocenteResponsavel _docenteResponsavel= menu.M_MenuPrincipalFuncionarios_Utilizadores_Inserir_DocenteResponsavel(consultaDocenteResponsavel, _funcionarios);
			 //  caso o método devolva Alunos
			if(_docenteResponsavel !=null)
			{				
				consultaUtilizadoresAux=_funcionarios.verificaInsereDcenteResponsavel(_docenteResponsavel,consultaUtilizadores);
				
				if (consultaUtilizadoresAux!=null)
				{	//acrescenta no array 
					consultaDocenteResponsavel.add(_docenteResponsavel); //é aqui que dá o o NULLPOINTEREXCEPTION
					
					trataf.escreve(consultaUtilizadoresAux, "Utilizadores.dat");
					
					trataf.escreve(consultaDocenteResponsavel, "DocenteResponsavel.dat");
					menu.M_Aviso("Utiizador adicionado ");
					
					MenuPrincipalFuncionarios(_funcionarios);
				}
				menu.M_Aviso("Utilizador ja inserido no sistema!");
				MenuPrincipalFuncionarios(_funcionarios);
			}
			
		 }		
 }
public DocenteResponsavel M_MenuPrincipalFuncionarios_Utilizadores_Inserir_DocenteResponsavel(ArrayList<DocenteResponsavel> carregaDocenteResponsavel, Funcionarios _func)
	{
		
		int opc=0;
		String nomeAux="";
		String moradaAux="";
		String localidadeAux="";
		String contactoAux="";
		String usernameAux="";
		String passwordAux="";
		int tipouserAux=2;
		int biAux=0;
		int nifAux=0;
		int idadeAux=0;
		String areaAux="";
		
		DocenteResponsavel _docenteResponsavel=null;
		Funcionarios _funcionariosTemp=new Funcionarios();
		
		
	    Scanner scan = new Scanner(System.in);  
	    Scanner scan1 = new Scanner(System.in);
	    do{      
	
	    	try{
	            System.out.print ('\f');                
	            System.out.println("\t-> SGE ->Gestão de Utilizadores<-\n");    
	            System.out.println("\t---->Inserir Docente Responsavel ao sistema\n");
	            System.out.println("Indique o nome do Docente Responsavel :\n");
	            nomeAux=scan.nextLine();
	            System.out.println("Indique a  morada do Docente Responsavel\n");
	            moradaAux=scan.nextLine();
	            System.out.println("Indique a localidade Docente Responsavel\n");
	            localidadeAux=scan.nextLine();
	            System.out.println("Indique o contacto do Docente Responsavel\n");
	            contactoAux=scan.nextLine();
	            System.out.println("Indique o username doDocente Responsavel\n");
	            usernameAux=scan.nextLine();
	            System.out.println("Indique a password do Docente Responsavel\n");
	            passwordAux=scan.nextLine();
	            System.out.println("Indique o BI do Docente Responsavel\n");
	            biAux=scan.nextInt();
	            System.out.println("Indique o NIF do Docente Responsavel\n");
	            nifAux=scan.nextInt();
	            System.out.println("Indique a idade do Docente Responsavel\n");
	            idadeAux=scan.nextInt(); 
	            System.out.println("Indique o a area do Docente Responsavel\n\n");
	            areaAux=scan1.nextLine();
	            System.out.println("1- Guardar Guardar\n "); 
	            System.out.println("2- Limpar\n "); 
	            opc=scan1.nextInt();
	    	}
	    	catch(InputMismatchException e)
	    	{
	    		System.err.println("Deve inserir os dados correctos nos campos especificados!\n\n");
	    		_docenteResponsavel=null;
	    	    String limpa =scan.nextLine();	    		
	    	} 
	    	if (opc==1)
	    	{		    
	    		_docenteResponsavel= new DocenteResponsavel(nomeAux,moradaAux,localidadeAux,contactoAux,usernameAux,passwordAux,tipouserAux,biAux,nifAux,idadeAux,areaAux);
		    }
	      }	
	    while (_docenteResponsavel==null || opc==2);                
	    
	    return _docenteResponsavel;
	}

2 Respostas

M

O problema estava nos Ficheiros.

B

Duas dicas:

Quando for procurar por algum erro, veja o stacktrace abaixo.

Exception in thread "main" java.lang.NullPointerException at sge5f.SGE.MenuPrincipalFuncionarios_Utilizadores_Inserir_Docente_Responsavel(SGE.java:297) at sge5f.SGE.MenuPrincipalFuncionarios_utilizadores(SGE.java:209) at sge5f.SGE.MenuPrincipalFuncionarios(SGE.java:176) at sge5f.SGE.Login(SGE.java:130) at sge5f.SGE.opcaoEntradaDados(SGE.java:95) at sge5f.SGE.main(SGE.java:19)
Olhe para o final a linha mais acima no trace: b[/b]

SGE.java é o nome do arquivo, e 297 é o número da linha com o problema. É só ir até essa linha e resolver o problema. Se a classe em questão não foi tua, procure abaixo no stack até achar a primeira classe tua, e o número da linha dela.

Segundo, NullPointerExceptions(NPE) só acontecem por um motivo:

String meuObjetoNulo = null;
meuObjetoNulo.acessarAlgumMétodo(); // Tentei acessar alguma coisa em um objeto nulo. Dá NPE.
Criado 24 de fevereiro de 2013
Ultima resposta 24 de fev. de 2013
Respostas 2
Participantes 2