0

我正在开发一个程序,我需要能够动态加载不同版本的 Java 可执行文件。这些可执行文件的不同版本相互干扰,因此我需要为它们中的每一个创建一个不同的 ClassLoader 并使用我创建的接口执行加载的类。但是,这些可执行文件之一使用:

Thread.currentThread().getContextClassLoader():

这与我创建的用于加载所需可执行文件的 ClassLoader 不对应。为了解决这个问题,我将子 ClassLoader 设置为上下文 ClassLoader 以调用所需的可执行文件,并且在任务完成后,我将上下文 ClassLoader 再次设置回原来的值。它会是这样的:

ClassLoader mainClassloader = ClassLoader.getSystemClassLoader();
URL[] urls = new URL[]{new File(path).toURI().toURL()};
newClassloader = new URLClassLoader(urls, mainClassloader);
// Set newClassLoader as the Thread ClassLoader
Thread.currentThread().setContextClassLoader(newClassloader);

   // DO STUFF IN THE LOADED EXECUTABLE

Thread.currentThread().setContextClassLoader(mainClassloader)

该程序有效,但我不知道这是否会在执行过程中产生错误,或者这是否是一种糟糕的做法。如果是这样,是否还有其他可能做类似的事情?谢谢您的回答。

4

0 回答 0