Java.lang.NullPointerException

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.

[code]
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);
}

}[/code]

[code]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;
}[/code]

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.

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!

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

Acredito que seu problema esta neste trecho…
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);
}
}

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

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

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

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!

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

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();
}

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…