I have a really weird problem.
I am using URLClassLoader to dynamically import files from a directory. The code works fine if I use a literal string and works fine if I use a variable in a literal string, but that is not what I need.
package test; import java.io.File; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.net.URLClassLoader; public class Test { public static void main(String[] args) { try { File subfolder = new File("C:\\temp\\"); URL classUrl = subfolder.toURI().toURL(); URL[] classUrls = { classUrl }; URLClassLoader ucl = new URLClassLoader(classUrls); for (File f : subfolder.listFiles()) { String name = f.getName() .substring(0, f.getName().lastIndexOf(".")).trim(); if (name.equals("TestClass")) System.out.println(name); try { MyInterface de = (MyInterface) Class.forName("TestClass", true, ucl) .newInstance(); de.printSomething(); } catch (ClassNotFoundException e) { } ucl.close(); } } catch (MalformedURLException e) { } catch (InstantiationException e) {
I need this to be possible:
MyInterface de = (MyInterface) Class.forName(name, true, ucl).newInstance();
But it does not work, although "name" is a valid string and is equal to "TestClass".
EDIT: I get an error:
java.lang.ClassNotFoundException: TestClass at java.net.URLClassLoader$1.run(Unknown Source) 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 java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Unknown Source) at test.Test.main(Test.java:25)
What's wrong?
source share