한 가지 해결 방법은 클래스 로더를 유틸리티 메서드에 전달한 후 이를 다시 forName 메서드에 전달하는 것이다.
public class Util {
public Object createInstance(String className, ClassLoader loader) {
Class<?> cl = Class.forName(className, true, loader);
...
}
...
}
또 다른 해결 방법은 현재 스레드의 컨텍스트 클래스 로더(context class loader)를 사용하는 것이다. 메인 스레드의 컨텍스트 클래스 로더는 시스템 클래스 로더다. 새 스레드가 생성될 때 해당 스레드의 컨텍스트 클래스 로더는 생성하는 쪽 스레드의 컨텍스트 클래스 로더로 설정된다. 결국 그대로 두면 모든 스레드의 컨텍스트 클래스 로더는 시스템 클래스 로더로 설정된다. 하지만 다음과 같이 호출하면 원하는 클래스 로더로 설정할 수 있다.
Thread t = Thread.currentThread();
t.setContextClassLoader(loader);