ClassNotFoundException対策
ClassNotFoundException例外は、指定したクラスが見つからないという例外です。
設定ファイルにてクラス名を設定したり、プログラム中で利用するクラスを実行中にロードするときに起こります。
特に、JDBCのプログラミングにおいて、Class.forNameメソッドでドライバのロードを行ったときに、
この例外が発生しがちです。
samples/exception/cls/ClassNotFoundExceptionTest.java - Eclipse SDK
|
package samples.exception.cls;
public class ClassNotFoundExceptionTest {
public static void main(String[] args) {
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
} catch (Exception e) {
e.printStackTrace();
}
}
}
|
|
このコードは、MySQLというデータベースのJDBCドライバを読み込む例です。
クラスパスを適切に設定していないと、下記のようなエラーが発生します。
コマンド プロンプト
|
C:\JavaMaster\bin>java -cp . samples.exception.cls.ClassNotFoundExceptionTest
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at samples.exception.cls.ClassNotFoundExceptionTest.main(ClassNotFoundExceptionTest.java:7)
|
ほかにも、この例外が発生する原因としては、
forNameメソッドに指定するクラス名の間違いなどが考えられます。
なお、この例では、MySQLのサイトから
ダウンロードできる「MySQL Connector/J」というJDBCドライバに含まれるJARファイルを
クラスパスに含めると、例外が発生しなくなります。
たとえば、javaコマンドでは、以下のように実行します。(JARファイルがc:ドライブ直下にある場合)
java -cp .;c:/mysql-connector-java-3.1.12-bin.jar samples.exception.cls.ClassNotFoundExceptionTest
|