当前位置: 首页 > 知识库问答 >
问题:

在终端中动态加载java类

任元青
2023-03-14

应用程序是模块化插件html" target="_blank">架构。即,在完成工作的同时动态加载类。为此,自定义类加载器扩展了类加载器。

问题的本质是在Eclipse中运行应用程序,而在终端(ubuntu)中使用以下代码行(其中目录m/表示模块的位置*. class):

java -jar ModularApp.jar m/

我得到以下信息:

10:07:24085调试主CModuleLoader:findClass:39-运行系统类加载器。线程“main”java中出现异常。朗。反思。在太阳上调用targetException。反映NativeMethodAccessorImpl。在sun上调用0(本机方法)。反映NativeMethodAccessorImpl。在sun上调用(NativeMethodAccessorImpl.java:57)。反映DelegatingMethodAccessorImpl。在java上调用(DelegatingMethodAccessorImpl.java:43)。朗。反思。方法在org调用(Method.java:606)。日食jdt。内部的加林加洛德。装罐机。main(jarsrcloader.java:58)由:java引起。lang.NoClassDefFoundError:ru/intetech/module/CModule位于java。lang.ClassLoader。在java上定义Class1(本机方法)。lang.ClassLoader。在java上定义类(ClassLoader.java:800)。lang.ClassLoader。ru上的defineClass(ClassLoader.java:643)。英特科技。模块阅读器。CModuleLoader。java上的findClass(CModuleLoader.java:35)。lang.ClassLoader。java上的loadClass(ClassLoader.java:425)。lang.ClassLoader。ru上的loadClass(ClassLoader.java:358)。英特科技。模拉普。主要的main(main.java:42)。。。另外5个原因是:java。lang.ClassNotFoundException:ru。英特科技。单元java上的CModule。lang.ClassLoader。ru上的findClass(ClassLoader.java:531)。英特科技。模块阅读器。CModuleLoader。java上的findClass(CModuleLoader.java:40)。lang.ClassLoader。java上的loadClass(ClassLoader.java:425)。lang.ClassLoader。loadClass(ClassLoader.java:358)。。。还有12个

下面是一段代码,用户类加载器(扩展类加载器),其中有一个错误:

protected Class<?> findClass(String className) throws ClassNotFoundException
{
    try
    {
        byte b[]=getClassAsBytes(m_pathToBin+className+".class");
        return (defineClass(className, b, 0, b.length));
    }
    catch(FileNotFoundException ex)
    {
        m_log.debug("Run of the System Classloader.");
        return (super.findClass(className));
    }
    catch(IOException ex)
    {
        m_log.debug("Run of the Bootstrap.");
        return (super.findClass(className));
    }
}

有什么问题吗?

根据本条实施的P.S.装载机:http://sysmagazine.com/posts/104229/

共有1个答案

郦昆
2023-03-14

看:堆栈跟踪显示消息“Run of The System Classloader”,这证明第一个捕获已执行。这是由FileNotFoundException引起的,这显然发生在getClassAsBytes方法中:这是您必须调查的:找出您试图读取的文件(放置一个显示绝对路径的跟踪),以及该文件不存在的原因。

(最终,catch块尝试由系统类加载器加载所需的类,系统类加载器没有对该类的访问权限,因此,它抛出ClassNotFoundException)。

 类似资料:
  • 问题内容: 我查找了语法并搜索了api,但仍然对该过程感到困惑。我还搜索了Stackoverflow。加载类并从中动态创建对象的正确方法是什么?换句话说,我希望用户指定要创建的对象类型,然后创建该类型的对象。我不需要菜单,因为我希望他们能够选择当前目录中的任何类。 问题答案: 假设该类具有无参数构造函数,则最简单的方法是- 参考-java.lang.Class

  • 问题内容: 我正在尝试编写一个将从用户的串行端口读取的Java小程序。为此,我将Java Comm API 与RXTX库结合使用。我已经成功地通过本地Java应用程序读取了数据,但似乎无法在applet中进行相同的操作。问题在于RXTX库是一个本机库,我还没有找到在Java小程序中加载该库的方法。我发现了两篇有趣的文章(在Applets中使用JNI引用了本文),但是这两篇文章已有10多年的历史了,

  • 问题内容: 更新到OS X 10.11后,我的Java停止工作。我读了多个应该做的地方: 但是问题是当我运行第一行代码时,我得到的是: 有什么想法可以解决吗? 问题答案: 好像新的OS X引入了新的系统集成保护(又名无根)一样。 您可以尝试通过以下步骤在恢复模式下禁用无根用户: 进入恢复模式(听到启动音后同时重新启动并按住+ 键) 当出现“ OS X Utilities”屏幕时,请下拉屏幕顶部的“

  • 但问题是,当我运行第一行代码时,我得到的只是: 你知道我能做些什么来解决这个问题吗?

  • 问题内容: 在Java中,我可以向类路径中动态添加内容并加载类(“动态”的意思是无需重新启动应用程序)。是否有一个已知的框架/库可以处理模块的动态加载/卸载而无需重新启动? 通常的设置是负载平衡器,应用程序的多个实例以及逐步部署和重新启动新版本(尤其是对于Web应用程序)。我正在寻找其他东西- 具有多个服务/插件的应用程序,可能是单实例桌面应用程序,在其中禁用单个服务很便宜,但是关闭或重新启动完整

  • 我有OSGI bundle(比方说A),它依赖于非OSGI库(比方说B)。B正在使用class.ForName加载一个类(库A中的ClassA是库B中的ClassB类型)。我已经包装了库B,使其成为osgi捆绑包,并导入了库A中所需的包,但我无法使用class.forname加载该类。请注意,库B是第三方库,我没有任何控制这一点。 下面是我创建的支持OSGI的库B的清单文件- manifest-v