This article was originally posted on JRoller on June 30, 2005.
The other day, I wanted to write an Eclipse plugin (maybe more about that in a different post), in which I need to read a selected class file from the project I am working on and execute a method in it. Since I can not have my project in the classpath, I found out that the only solution is to have the class loaded dynamically. If there is a better solution in Eclipse, please somebody tell me.
Before starting to write my plugin, I decided to write a small test application, because I never used class loading before. So here is the class I want to load:
package hello; public class HelloWorld { public void run() { System.out.println ("Hello World!"); } }
To load it and execute the run method, you can then use the following lines of code:
ClassLoader loader = new ClassLoader(getClass().getClassLoader()) { public Class findClass(String name) { try { String path = "C:\\mypath\\hello"; File file = new File(path, name + ".class"); RandomAccessFile raf = new RandomAccessFile(file, "r"); byte[] content = new byte[(int)file.length()]; raf.readFully(content); return defineClass("hello." + name, content, 0, content.length); } catch (Exception e) { e.printStackTrace(); } return null; } }; try { Class helloClass = loader.loadClass("HelloWorld"); Object hello = helloClass.newInstance(); Method m = helloClass.getMethod("run", new Class[0]); m.invoke(hello); } catch (Exception e) { e.printStackTrace(); }
I did not try the code on more recent java, but since the whole Class Loader API was in the process of being removed, I guess there are other ways to perform this nowadays. I tried asking ChatGPT to produce this code, and the result is quite similar, except it was using the URLClassLoader object which handles reading the file content for us.