2013-01-25 4 views
1

동적으로로드 된 클래스에서 Java 클래스를 동적으로로드하는 데 문제가 있습니다.ImageJ 플러그인에서 클래스를 동적으로로드하는 중

내 수업은 ImageJ 플러그인이며 classloader을 통해 다른 모듈을 동적으로로드합니다. ImageJ 플러그인과 동일한 패키지에있는 모듈을로드 할 때 NoClassDefFoundError이 있습니다.

내가 정확히 할 것은 :

  1. ImageJ에로드 (A)를 플러그인
  2. (A) 취득 시스템 클래스 로더
  3. (A) 클래스 로더에 항아리 URL을 추가
  4. (A) 나는이 NoClassDefFoundError를 얻을 수 있기 때문에 B 클래스를로드 할 수 없습니다입니다 Class.forName

를 사용하여 항아리에 원하는 클래스 (B)를로드하려고 현재 클래스 로더에서 찾을 수없는 A의 클래스를 가리키는 B로 인해 발생합니다.

내 모듈을로드하고 이전에 ImageJ에 의해로드 된 jar에 대한 참조를 찾을 수 있도록 첫 번째 위치에 플러그인을로드하는 데 사용되는 동일한 클래스 로더 ImageJ을 사용해야한다고 생각합니다. ImageJ을 다시 컴파일하지 않고이 작업을 수행하고 싶습니다.

ImageJ 코드를 나타내거나 수정해야 할 필요없이이 문제를 해결할 수있는 방법이 있습니까?

의사 클래스 예는

package a; 
class A extends PlugInFrame {} 


package a; 
class C extends MyOwnPlugIn {} 

package b; 
import a; 
class B extends C {} 

답변

1

나는 당신이 그것을 사용

ClassLoader classLoader = A.getClass().getClassLoader() 

다음의 클래스 로더를 동적으로 이러한 클래스를로드 할 수 있지만 얻을 필요가 있는지 확실하지 않다 B가 no argument constructor을 가져야 함을 명심하십시오.

B를 포함하는 플러그인 jar 파일을 빌드하면 어떨까요? 나는 많은 플러그인을 만들었고 일반적으로 의존성을 추가 한 다음 필요한 모든 종속성을 포함하는 플러그인 jar 파일을 빌드합니다.

2

가장 쉬운 방법은 클래스를 동적으로로드하는 것이 아니라 직접 사용하는 것입니다.

이 방법이 없다면 가장 좋은 방법은 .jar 파일이 모두 ImageJ의 플러그인/폴더에 있는지 확인하는 것입니다 (피지를 사용하는 경우 비 플러그인 .jar 파일은 jars /에 있습니다). ImageJ의 플러그인 클래스 로더 : IJ.getClassLoader(). loadClass ("blub");

3 단계는 큰 문제가 아니므로 요소를 시스템 클래스 로더의 클래스 경로에 추가하면 안됩니다.

또한 모든 ImageJ 전문가는 StackOverflow에 게시하지 않고 [email protected]를 통해 접근 할 수 있습니다.

관련 문제