在运行时在java ClassNotFoundException中加载类

时间:2012-10-04 00:51:54

标签: java plugins classloader runtime-error classnotfoundexception

我在java中运行时调用类时遇到问题 我基本上是一个插件框架

首先打开插件/ Plugins.cfg并将测试解析成地图。 cfg文件中的EX文本 1 = myplugin 2 = plugin2

(每个插件的主要类是:插件。(插件名称).main.class)

你可以看到它从地图加载每个值并试图运行它的主类

public static void loadPlugins()
{
    int x = hackers.core.startup.InitializeGame.map.size();
    for (int i = 1; i<=x;i++)
    {
        String className = hackers.core.startup.InitializeGame.map.get(i + "");

        File file  = new File(System.getProperty("user.dir") + File.separator + "plugins" + File.separator + className);
        URL url = null;
        try {
            url = file.toURI().toURL();
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }  
        URL[] urls = new URL[]{url};
        ClassLoader cl = new URLClassLoader(urls);

        try {
            Class cls = cl.loadClass("plugin." + className + ".main");
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        System.out.println(className);
    }
}

Class cls = cl.loadClass("plugin." + className + ".main");

^ line给出了错误:java.lang.ClassNotFoundException:plugin.myplugin.main

任何人都知道这里有什么不对吗?或者有任何建议,我已经查看了它的API,但它让我感到困惑,缺乏文档。

1 个答案:

答案 0 :(得分:0)

您的file未指向有效的类或jar文件。

调试以下行;您会注意到它的路径不是文件系统中的现有路径。

File file  = new File(System.getProperty("user.dir") + File.separator + "plugins" + File.separator + className);

我认为您忘记在.class中加入className