2014-10-20 4 views
1

NetBeans IDE에서 java ClassLoader의 loadClass 메서드를 사용하여 클래스를 동적으로로드하려고합니다. 나는 다음과 같은 독립 실행 형 프로그램을 실행하면 제대로 실행 예상대로 출력 인쇄됩니다 :ClassNotFoundException - ClassLoader를 사용하여 웹 응용 프로그램에 클래스를 동적으로로드하는 중

public class StandaloneClass { 

    public static void main(String[] args) { 
     try { 

      String directory = "C:\\Workspace\\ProjectMeteor\\src\\java\\com\\meteor\\loader"; 

      File file = new File(directory); 
      URL url = file.toURI().toURL(); 
      URL[] urls = new URL[]{url}; 

      ClassLoader cl = new URLClassLoader(urls); 

      Class cls = cl.loadClass("com.meteor.loader.ClassToBeLoaded"); 
      Object o = cls.newInstance(); 

      System.out.println("Class Loaded: " + o.getClass().toString()); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

} 

출력 : - 클래스로드 : 클래스 com.meteor.loader.ClassToBeLoaded

하지만를 동일한 코드 조각 (웹 애플리케이션에서)을 던져서 ClassNotFoundException을 던지십시오.

@Path("/test") 
public class DynamicWebClass { 

    @GET 
    @Path("/getFileExplorerNodes") 
    @Produces(MediaType.TEXT_PLAIN) 
    public String getFileExplorerNodes() { 
     try { 

      String directory = "C:\\Workspace\\ProjectMeteor\\src\\java\\com\\meteor\\loader"; 

      File file = new File(directory); 
      URL url = file.toURI().toURL(); 
      URL[] urls = new URL[]{url}; 

      ClassLoader cl = new URLClassLoader(urls); 

      Class cls = cl.loadClass("com.meteor.loader.ClassToBeLoaded"); 
      Object o = cls.newInstance(); 

      return o.getClass().toString(); 

     } catch (Exception e) { 
      e.printStackTrace(); 
      return "error"; 
     } 
    } 

} 

출력 : -
java.lang.ClassNotFoundException가이 : 그것은 독립 실행 형 프로그램에서 잘 작동 될 때 웹 응용 프로그램에서 예외를 던지고 왜

을 com.meteor.loader.ClassToBeLoaded? 이 문제를 해결하고 웹 응용 프로그램에서 제대로 실행하려면 어떻게해야합니까?

+1

수업이 전쟁에 포장되어 있는지 확인하십시오. – dasrohith

+0

예. 그 계급은 전쟁 중에있다. 전쟁은 프로젝트의 dist 폴더 밑에 있습니다. –

+2

그러나 C : /의 다른 디렉토리를 가리키고 있습니다. 상대 URL 제공 – dasrohith

답변

1

클래스 로더에 제공된 URL에 문제가있는 것 같습니다. 상대방을 제공하십시오 URL

+0

정보를 제공해 주셔서 감사합니다. 특히 전쟁에 대한 나의 URL을 가리키기 위해. 또는 URLClassLoader를 기본 URL로 대체 할 수 있습니다. ** ClassLoader cl = DynamicWebClass.class.getClassLoader(); ** –

+0

환영합니다 .... 문제가 해결되었음을 알려드립니다. – dasrohith

관련 문제