URLClassLoader不断抛出ClassNotFoundException。我究竟做错了什么?

斯蒂芬·萨沃莱宁(Stefan Savolainen)

我正在一个大学的Java项目中工作,该项目要求我实现一个简单的插件体系结构。项目A中的一个主要应用程序必须从另一个项目B中的指定目录中加载插件。在对该主题进行了一些研究(包括stackoverflow)之后,我决定使用URLClassLoader加载类,然后将其实例化。项目B引用项目A,并且所有插件都扩展了一个通用的插件类(也可以是一个接口,但不应有任何区别)。到目前为止,这是我得到的:

我尝试加载的插件类的源代码:

package plugin;

import de.uks.student.pluginpattern.model.EditorPlugin;

public class Circle extends EditorPlugin
{
   @Override
   public void init()
   {

   }
}

以及应该加载该类的代码:

public void init(String[] args)
   {
      editorPane = new EditorPane().withWidth(500).withHeight(500);
      toolBar = new ToolBar();
      plugins = new EditorPluginSet();
      // load plugins
      File pluginDir = new File(PLUGIN_PATH);
      if (!pluginDir.exists())
      {
         System.err.println("Plugin path not found!!");
         return;
      }
      String[] plugins = pluginDir.list();
      if (plugins == null)
      {
         System.err.println("Plugin path points to a file!!");
         return;
      }

      for (String pluginString : plugins)
      {
         for (String argString : args)
         {
            if (pluginString.contains(argString))
            {
               System.out.println("Loading plugin from " + pluginString);
               File pluginFile = new File(PLUGIN_PATH + "/");
               // as getAbsolutePath embeds the relative path ... /../pluginProject ...
               // which may not be processed correctly by the OS (Windows at least),
               // we correct the path manually (just to be on the safe side)
               String absolutePath = pluginFile.getAbsolutePath();
               String[] split = absolutePath.split("\\\\");

               List<String> splitsimpleList = Arrays.asList(split);
               ArrayList<String> splitList = new ArrayList<>(splitsimpleList);
               for (int i = 0; i < splitList.size() - 1; ++i)
               {
                  if (splitList.get(i + 1).equals(".."))
                  {
                     splitList.remove(i);
                     splitList.remove(i);
                     break;
                  }
               }
               StringBuilder b = new StringBuilder();
               for (String string : splitList)
               {
                  b.append(string);
                  b.append("/");
               }
               File pluginFileForRealThisTime = new File(b.toString());

               URL pluginURL = null;
               try
               {
                  pluginURL = pluginFileForRealThisTime.toURI().toURL();
               } catch (MalformedURLException e)
               {
                  // TODO Auto-generated catch block
                  e.printStackTrace();
               }
               URL[] urls = {pluginURL};
               ClassLoader parentClassLoader = this.getClass().getClassLoader();
               URLClassLoader uLoader = new URLClassLoader(urls, parentClassLoader);
               Class<?> pluginClass = null;
               try
               {
                  String className = "plugin." + argString;
                  pluginClass = uLoader.loadClass(className);
               } catch (ClassNotFoundException e)
               {
                  // TODO Auto-generated catch block
                  e.printStackTrace();
               }
            }
         }
      }
   }

现在,我总是以ClassNotFoundException结尾:

java.lang.ClassNotFoundException:plugin.Circle在java.net.URLClassLoader $ 1.run(未知源)在java.net.URLClassLoader $ 1.run(在java.security.AccessController.doPrivileged(本机方法)处)。 net.URLClassLoader.findClass(未知源)(位于java.lang.ClassLoader.loadClass(未知源),位于java.lang.ClassLoader.loadClass(未知源),位于de.uks.student.pluginpattern.model.EditorSystem.init(EditorSystem。 java:412),位于de.uks.student.pluginpattern.EditorSystem.main(EditorSystem.java:13)

我已经检查过了

  • 生成的URL可以通过任何Web浏览器和Windows资源管理器正确解析。
  • Circle.class已构建,并存在于所用URL引用的目录中
  • className解析为“ plugin.Circle”,它应该是要使用的正确二进制名称
  • 从plugin.Circle删除继承没有任何区别。

我几乎没有其他尝试方法的想法。我究竟做错了什么?

斯蒂芬·萨沃莱宁(Stefan Savolainen)

我必须将ClassLoader指向bin文件夹而不是bin / plugins文件夹

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

URLClassLoader不断抛出ClassNotFoundException。我究竟做错了什么?

来自分类Dev

MysqlDataSource的Java EE ClassNotFoundException。我究竟做错了什么?

来自分类Dev

JComboBox。我究竟做错了什么?

来自分类Dev

验证输入。我究竟做错了什么?

来自分类Dev

我究竟做错了什么?请

来自分类Dev

全选?我究竟做错了什么?

来自分类Dev

Strapi/Graphql。我究竟做错了什么?

来自分类Dev

我究竟做错了什么?我不断收到NaN吗?(赫伦的公式)

来自分类常见问题

ANTLR语法无法正常工作。我究竟做错了什么?

来自分类Dev

我究竟做错了什么?使用lxml解析HTML

来自分类Dev

ANTLR语法无法正常工作。我究竟做错了什么?

来自分类Dev

如何正确安装pyinstaller?(我究竟做错了什么?)

来自分类Dev

我究竟做错了什么?-php新手

来自分类Dev

新的Java类无效。我究竟做错了什么?

来自分类Dev

此查询不起作用。我究竟做错了什么?

来自分类Dev

无法从此查询获取结果。我究竟做错了什么?

来自分类Dev

我究竟做错了什么?HTML和Javascript

来自分类Dev

变量不替代值。我究竟做错了什么?

来自分类Dev

我究竟做错了什么?Python阅读与辨别

来自分类Dev

搜索并替换哈希值。我究竟做错了什么?

来自分类Dev

Bootstrap 网格不居中?我究竟做错了什么

来自分类Dev

Firebase 存储文件未下载。我究竟做错了什么?

来自分类Dev

Python冒泡排序递归。我究竟做错了什么?

来自分类Dev

KeyError,即使键在字典中?我究竟做错了什么?

来自分类Dev

插入/更新数量的制作程序。我究竟做错了什么?

来自分类Dev

Cheerio 不工作。我究竟做错了什么?

来自分类Dev

¿我做错了什么?

来自分类Dev

我究竟做错了什么?它正确地将 e 的值放入 inputString 中,但随后它不会改变位置,因此它会不断覆盖字母

来自分类Dev

为什么我的文字不在导航栏的中间?我究竟做错了什么?

Related 相关文章

  1. 1

    URLClassLoader不断抛出ClassNotFoundException。我究竟做错了什么?

  2. 2

    MysqlDataSource的Java EE ClassNotFoundException。我究竟做错了什么?

  3. 3

    JComboBox。我究竟做错了什么?

  4. 4

    验证输入。我究竟做错了什么?

  5. 5

    我究竟做错了什么?请

  6. 6

    全选?我究竟做错了什么?

  7. 7

    Strapi/Graphql。我究竟做错了什么?

  8. 8

    我究竟做错了什么?我不断收到NaN吗?(赫伦的公式)

  9. 9

    ANTLR语法无法正常工作。我究竟做错了什么?

  10. 10

    我究竟做错了什么?使用lxml解析HTML

  11. 11

    ANTLR语法无法正常工作。我究竟做错了什么?

  12. 12

    如何正确安装pyinstaller?(我究竟做错了什么?)

  13. 13

    我究竟做错了什么?-php新手

  14. 14

    新的Java类无效。我究竟做错了什么?

  15. 15

    此查询不起作用。我究竟做错了什么?

  16. 16

    无法从此查询获取结果。我究竟做错了什么?

  17. 17

    我究竟做错了什么?HTML和Javascript

  18. 18

    变量不替代值。我究竟做错了什么?

  19. 19

    我究竟做错了什么?Python阅读与辨别

  20. 20

    搜索并替换哈希值。我究竟做错了什么?

  21. 21

    Bootstrap 网格不居中?我究竟做错了什么

  22. 22

    Firebase 存储文件未下载。我究竟做错了什么?

  23. 23

    Python冒泡排序递归。我究竟做错了什么?

  24. 24

    KeyError,即使键在字典中?我究竟做错了什么?

  25. 25

    插入/更新数量的制作程序。我究竟做错了什么?

  26. 26

    Cheerio 不工作。我究竟做错了什么?

  27. 27

    ¿我做错了什么?

  28. 28

    我究竟做错了什么?它正确地将 e 的值放入 inputString 中,但随后它不会改变位置,因此它会不断覆盖字母

  29. 29

    为什么我的文字不在导航栏的中间?我究竟做错了什么?

热门标签

归档