2016-09-08 4 views
0

나는 두 개의 클래스가 있습니다 항아리에 MainClaz에서자바의 클래스 경로에 추가 된 새 Jar에서 클래스를 자동으로로드하는 방법은 무엇입니까?

  1. MainClaz
  2. MyTest2

,

public class MainClaz { 

    public static void main(String[] args) throws InterruptedException { 
     while (true) { 
      try { 

       Class aClass = Class.forName("com.test.MyTest2"); 
       Object t = aClass.newInstance(); 
      } catch (Exception e) { 
       System.out.println("Exception For MyTest2 "); 
      } 
      Thread.sleep(10000); 
      try { 
       Class aClass = Class.forName("com.test.MyTest3"); 
       Object t = aClass.newInstance(); 
      } catch (Exception e) { 
       System.out.println("Exception For MyTest3 "); 
       e.printStackTrace(); 
      } 
     } 
    } 
} 

내가 포장 한 두 클래스를 JAR (1)에 넣어 클래스 패스.

MyTest3은 여기에 존재하지 않으므로 ClassNotFoundException이 계속 표시됩니다.

이제 말하십시오 ... MyTest3 클래스를 포함하는 새 병 (Jar 2)을 만들고이 jar를 클래스 경로 폴더에 복사하십시오.

클래스에 다른 새로운 jar 파일에 MyTest3 클래스를 넣었으므로 클래스 경로에서 MyTest3을 찾아야하지만 ClassNotFoundException을 던지고 있습니다.

어떻게 작동합니까?

요구 사항에 더 많은 정보를 추가 : 지금 클래스 이름으로

는 하드 코딩되어있다. 그러나 그들은 외부 소스로부터 읽혀질 것입니다 (어떤 데이터베이스라고합시다). 하지만 나는 클래스 경로의 새로운 항아리에 새로운 클래스를 추가하고 클래스의 정규화 된 클래스 이름을 데이터베이스에 추가하여 루프 프로그램의 다음 반복에서 동적으로 클래스를로드 할 수 있도록합니다. 새 항아리의

+0

당신은 동적으로 이미로드 된 클래스 로더의 클래스 경로 (기본 클래스 로더를) 수정할 수 없습니다에서 적어도 나는 방법을 알지 못한다. 기본값을 바꾸려면 JVM을 다시 시작해야합니다. 그러나 클래스 로더의 새 인스턴스를 만들고 새 클래스 로더를 새 클래스 로더에로드 한 다음 새 클래스 로더를 사용하여 해당 클래스를 사용할 수 있으므로 요구 사항을 자세히 작성하십시오. – SGM1

답변

0
  1. 변경 패키지 이름은
  2. MyTest3에 대한 가져 오기를 추가 test2에하기 :
import com.test2.MyTest3; 
+0

내가 추가 한 정보를 좀 더 살펴볼 수 있겠습니까? ... 그것이 requirments에 더 추가 할 수 있는지 확인하십시오. – Sohi