结合来自该站点上的许多帖子和许多其他帖子的信息,我得到了以下代码来动态添加(在运行时)一个包含类的目录到类路径并在该目录中加载一个类。
我正在使用 OSGi 包并从 Eclipse 运行“Eclipse 应用程序”(一种运行配置)。
这是我正在使用的代码:
案例1:(这两种情况都是不同的事情,我试图做同样的事情。)
File file = new File("/Users/alek/fastFIX/myJPass/");
URL url = file.toURI().toURL();
URL[] urls = new URL[]{url};
ClassLoader cl = new URLClassLoader(urls);
Class cls = cl.loadClass("GuiLauncher"); //the file GuiLauncher.class is in the /Users/alek/fastFIX/myJPass/ directory
Class[] argTypes = new Class[] { String[].class };
Method main = cls.getDeclaredMethod("main", argTypes); //trying to run the main class
main.invoke(null, (Object) args);
我没有收到任何错误,也没有任何反应。我还尝试了以下内容,因为我实际上需要加载的类与其他(已经加载的)类进行交互。
案例二:
ClassLoader currentThreadClassLoader = Thread.currentThread().getContextClassLoader();
URLClassLoader urlClassLoader = new URLClassLoader(new URL[] { new File("/Users/alek/fastFIX/myJPass/").toURL() }, currentThreadClassLoader);
Thread.currentThread().setContextClassLoader(urlClassLoader);
然后我像这样加载:
Class<?> c = Class.forName("GuiLauncher");
或像这样:
Class<?> c = Thread.currentThread().getContextClassLoader().loadClass("GuiLauncher");
并尝试像这样调用主函数:
Class[] argTypes = new Class[] { String[].class };
Method main = cls.getDeclaredMethod("main", argTypes); //trying to run the main class
main.invoke(null, (Object) args);
这里也没有任何反应。
任何可能发生的事情的线索?我已经阅读了这里的所有相关帖子以及其他许多地方,但都没有运气。