我有java应用程序,使用以下代码将数据库驱动程序jar文件加载到类路径中
for (int i = 0; i < fileNames.length; i++)
{
Method method = (URLClassLoader.class).getDeclaredMethod("addURL", new Class[] {URL.class});
method.setAccessible(true);
method.invoke((URLClassLoader)ClassLoader.getSystemClassLoader(), new Object[] { new File(fileNames[i]).toURI().toURL() });
}
Class.forName(driverClassName);
con = DriverManager.getConnection(_url, _uid, _pwd);
这不适用于Java 9,因为它在将系统类加载器强制转换为URLClassLoader时会出现强制转换异常。 你怎么能在java 9中做到这一点?
这是新代码
String[] fileNames = m_dbDriverFileName.split(";");
URL[] path = new URL[fileNames.length];
for (int i = 0; i < fileNames.length; i++)
{
path[i] = new File(fileNames[i]).toURI().toURL();
}
URLClassLoader child = new URLClassLoader(path, this.getClass().getClassLoader());
Class.forName(m_dbDriverClass, true, child);
答案 0 :(得分:4)
在Java 9上the system class loader is no longer a URLClassLoader
(从未指定过 - 这是一个实现细节),并且无法在运行时将JAR附加到类路径。
您应该创建一个新的类加载器,例如a URLClassLoader
,具有所需的路径,系统类加载器为父级。有关详细信息,您应该扩展您的问题以显示如何继续加载驱动程序。