Java.lang.ClassNotFoundException

2 respostas
D

C:\java>dir

O volume na unidade C não tem nome.
O número de série do volume é 0867-E7A3

Pasta de C:\java

08/11/2007 17:26 <DIR> .
08/11/2007 17:26 <DIR> …
08/11/2007 17:24 445 CarregarDriver.java
05/10/2007 17:08 676.693 mysql-connector-java-5.1.5-bin.jar
2 arquivo(s) 677.138 bytes
2 pasta(s) 3.278.589.952 bytes disponíveis

C:\java>echo %classpath%
c:\java;c:\java\mysql-connector-java-5.1.5-bin.jar

C:\java>javac CarregarDriver.java
CarregarDriver.java:8: unreported exception java.lang.ClassNotFoundException; must be caught or declared to be thrown
Class.forName(“com.mysql.jdbc.Driver”);
^
1 error

import java.sql.*;

public class CarregarDriver{
    public static void main(String[] args) {
            Class.forName("com.mysql.jdbc.Driver");
    }
}

Alguém sabe o que está errado?!?!

[]'s

2 Respostas

P

Alguma classe que você esta chamando não esta no classpath.

L

Quando vc faz Class.forName esta executando um metodo certo?!
Esse metodo pode lançar uma exceção ClassNotFoundException, que significa que ele não achou a classe que você passou em formato de string. Ao dizer que pode lançar essa exceção, ele te obriga a trata-la, ou seja, programar o que vai acontecer se essa exceção ocorrer.
É por isso que seu programa esta com erro de compilação, ele não compila se vc não tratar isso

unreported exception java.lang.ClassNotFoundException; must be caught or declared to be thrown

Então vc tem duas opções, tratar a excecao ou lançar para cima (dizer que o método que chamou esse método deve tratar), logo vc pode fazer:

public class CarregaDriver {
  public static void main(String[] args) throws ClassNotFoundException {
    Class.forName("com.mysql.jdbc.Driver");
  }
}

Fazendo com que quem chame main trate, no seu caso, como é main, se der a a exceção ela vai parar o programa e mostrar a pilha no console.

ou

public class CarregaDriver {
	public static void main(String[] args) {
		try {
			Class.forName("com.mysql.jdbc.Driver");
		} catch (ClassNotFoundException e) {
			//trata a excecao
			e.printStackTrace();
		}
	}
}

Que vc teria que programar o que acontece se não achar a classe que passou no forName.

http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Class.html#forName(java.lang.String)

:wink:

Criado 8 de novembro de 2007
Ultima resposta 8 de nov. de 2007
Respostas 2
Participantes 3