2014-10-20 51 views
1

我想在NetBeans IDE中使用Java ClassLoader的loadClass方法动态加载类。 当我运行下面的独立程序它得到正确执行和打印效果与预期输出:ClassNotFoundException - 虽然使用ClassLoader在Web应用程序中动态加载类

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

但是,当我运行同一段代码(在Web应用程序中)抛出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

为什么会抛出异常的Web应用程序时,它是在独立的程序工作正常? 如何解决此问题并使其在Web应用程序中正常运行?

+1

请您检查课堂是否打包在战争 – dasrohith 2014-10-20 12:13:24

+0

是的。这个阶级在战争中。战争出现在项目的dist文件夹下。 – 2014-10-20 12:28:05

+2

但是你指向C:/中的其他目录。提供一个相对的网址 – dasrohith 2014-10-20 12:34:01

回答

1

看起来像提供给类加载器的URL的问题。请提供亲戚网址

+0

非常感谢您的信息。特别是将我的网址指向战争。或者,我们可以用默认值替换URLClassLoader。 ** ClassLoader cl = DynamicWebClass.class.getClassLoader(); ** – 2014-10-20 13:16:31

+0

欢迎您....很高兴知道它解决了您的问题 – dasrohith 2014-10-20 15:12:17

相关问题