Java.lang.NullPointerException

10 respostas
C
Tá dando esse erro: java.lang.NullPointerException. Será q o banco access não ta suportando tantas consultas ao banco?? Me deêm alguma idéia pra que seja feita só uma consulta nesse banco, pq é necessario criar varias vezes uma variavel do tipo desta classe Cromossomo.
import java.util.Vector;
import javax.swing.*;
import java.sql.*;
import javax.swing.table.DefaultTableModel;
public class BancoD
{
   private Connection can;
   private void conectar(String driver, String url, String login, String senha)
   {
       try
       {
           Class.forName(driver);
           System.out.println("DRIVER CARREGADO");
           this.can=DriverManager.getConnection(url, login,senha);
       }
        catch (Exception e)
        {
            System.out.println("Erro!");
        }
    }
 public Vector listarTurma()
    {
        Vector dados = new Vector();
        try
        {
            String sql = "select CodTurma, Disciplina, Turno, Carga from Turma ORDER BY CodTurma"; 
            Statement s = this.can.createStatement(); 
            ResultSet rs = s.executeQuery(sql); 
            String x = ""; String y =""; 
            while(rs.next())
            {
                int[] alelo = new int[3]; 
                alelo[0] = rs.getInt(1); 
                x = ""+rs.getInt(2);
                y = ""+rs.getInt(3);
                alelo[1] = Integer.parseInt(x+y);
                alelo[2] = rs.getInt(4); 
                dados.add(alelo); 
              }
           }
        catch(Exception e)
        {
            e.printStackTrace();
            System.out.println("Erro listarTurma: " + e);
        }
        return dados;
    }
    
    public Vector listarProf()
    {
        Vector dados = new Vector();
        try
        {
            String sql = "select CodProfessor, CodDisciplina from Professores ORDER BY CodProfessor"; 
            Statement s = this.can.createStatement(); 
            ResultSet rs = s.executeQuery(sql); 
            while(rs.next())
            {
                int[] alelo = new int[2]; 
                alelo[0] = rs.getInt(1); 
                alelo[1] = rs.getInt(2);
                dados.add(alelo); 
              }
           }
        catch(Exception e)
        {
            System.out.println("Erro listarProfessor: " + e);
        }
        return dados;
    }
    public void setConectar(String driver, String url, String login, String senha)
    {
        conectar(driver, url,login,senha);
    }
}
public Cromossomo() {
        cromo = new Vector();
        Vector cromo2 = new Vector();
        Vector aux = new Vector();
        Vector V = new Vector();
        Vector P = new Vector();
        aplicacao.setConectar(driver, url, login, senha);
        V = aplicacao.listarTurma(); 
        P = aplicacao.listarProf();
        int linha = 0;
        int conteudo[][]=new int[2][25];
        int dado[] = new int[3]; 
        int dado2[] = new int[3];
        for(int cont=0; cont< V.size(); cont++){
        dado = (int[]) V.elementAt(cont);
        
        if(cont>0)
           dado2 = (int[]) V.elementAt(cont-1);
        else
        dado2 = dado; 
        
        if(dado[0]==dado2[0])
        {
            linha = linha;
         
           for(int conta=0; conta< dado[2]; conta++){   
           int coluna = (int) (Math.random()*25);
        
           if(conteudo[1][coluna]!= 0)
               conta--;
           else 
               conteudo[1][coluna] = dado[1]; 
          }
        }
        else{
           linha++; 
           cromo2.add(conteudo); 
           for(int p=0; p<25; p++){
               conteudo[1][p] = 0;
           }
        }
       }
      
     for(int cont=0; cont< cromo2.size(); cont++){
        String jana = "";
        int k = 0;
        int prof[][]= new int [2][25];
        prof = (int[][]) cromo2.elementAt(cont);
        for(int j=0; j<25; j++){
            int d = prof[1][j];
            if(d!=0){
            jana = ""+d;
            int t = jana.length();
            jana = jana.substring(0,t-1);
            if(!jana.equals("")){
            d = Integer.parseInt(jana);
            
            for(int l=0 ; l<P.size(); l++){
            int prf[]= new int[2];
            prf = (int[])P.get(l);
            int pr = prf[1];
            if(pr==d){
                aux.add(pr);
              }
            }
            int h = (int)(Math.random()*aux.size());
            k = (Integer) aux.get(h);
             prof[1][j] = k;
             int algum = prof[1][j];
          }
         } 
        }
        cromo.add(prof);
     }
       aptidao = 0; probalidadeSelecao = 0;
    }

10 Respostas

F

Sabado, 29 de dezembro… to com uma preguiça de analisar teu código aí…

Vou botar ele pra rodar aqui e vou analisar.

Mas, meu, este tópico está DUPLICADO :? Não precisava disto.

M

Duplicar tópico é o “ó”! Você mesmo vai perder o controle depois!
Vou dar uma olhada no código e depois eu respondo!
Aquele abraço!

C

Tá desculpas pessoal, mas é q penso qw ninguém vai ver o topico, preciso resolver isso urgente!!!
me ajudem, to pesquisando e tals, dei um e.printStackTrace(); no método conectar, o erro é esse :

java.sql.SQLException: [Microsoft][Driver ODBC para Microsoft Access] Número excessivo de tarefas de cliente.

Enfim, creio q o access não suporta tantas consultas em pouco tempo, queria alguma forma de consultar o banco apenas uma vez e toda vez q eu criasse uma instancia da classe Cromossomonão fosse necessario consultar novamente o banco, será q entendenram?? Se souberem me ajudem. Obrigada

Maiquel_Diego
Acredito que seu problema esta neste trechowhile(rs.next())   

{

int[] alelo = new int[3];

alelo[0] = rs.getInt(1);

x = “”+rs.getInt(2);

y = “”+rs.getInt(3);

alelo[1] = Integer.parseInt(x+y);

alelo[2] = rs.getInt(4);

dados.add(alelo);

}

}

Faz o seguinte…
while(rs.next()!=null){…}

Maiquel_Diego

Acho q viajei.,… :? :? … Vou debugar o codigo…

sergiotaborda

lol realmente viajou. rs.next() retorna um boolean. comparar com null é errado.

C

Gente o método conectar q tá dando erro, por isso q a consulta ta retornando null, entendem??
O erro é esse: java.sql.SQLException: [Microsoft][Driver ODBC para Microsoft Access] Número excessivo de tarefas de cliente.

Me ajudem, não vi nada sobre esse erro!

M

Por que não usa um SGBD de verdade? Encare como uma crítica construtiva! :wink:

victorwss

Você não está fechando os Statements e os ResultSets. Isso vai manter mais e mais conexões abertas no BD até chegar ao limite. Quando este limite estoura, você pega essa horrorosa SQLException.

Para resolver isso, altere os seus blocos try de forma que fiquem mais ou menos assim:

Statement s = null;
ResultSet rs = null;
try {
    s = blablabla...
    rs = blablabla...
    //todo o resto do código do try aqui.
} catch (Exception e) {
    // faz o que você quiser aqui também.
} finally {
    if (s != null) s.close();
    if (rs != null) rs.close();
}
rolemberg

humm…de fato o amigo(victorwss) esta correto vc esta com muitas conexões abertas, assim o acess esta entendendo q vc esta fazendo varias conexões ao mesmo tempo…acredito que para usar o acess o legal seria usar pool de conexão…

para ver se o problema é esse também faça uma conexão simples com apenas uma chamada no banco…

Criado 29 de dezembro de 2007
Ultima resposta 2 de jan. de 2008
Respostas 10
Participantes 7