动态加载 Jar 并实例化已加载类的对象

2024-03-18

我尝试将 jar 动态加载到我的 Java 项目中。

这是类加载器的代码:

public class ClassLoad {

public static void main(String[] args) {

    String filePath = new String("C:/Users/Mehdi/Desktop/JavaClassLoader/jarred.jar");

    URL myJarFile = null;
    try {
        myJarFile = new URL("file://"+filePath);
    } catch (MalformedURLException e1) {
        System.out.println("1");
        e1.printStackTrace();
    }

    URLClassLoader cl = URLClassLoader.newInstance(new URL[]{myJarFile});

    Class Jarred = null;
    try {
        Jarred = cl.loadClass("com.jarred.exp.Jarred");
    } catch (ClassNotFoundException e) {
        System.out.println("2");
        e.printStackTrace();
    }

    Method simpleWrite = null;
    try {
        simpleWrite = Jarred.getMethod("simpleWrite", new Class[] {String.class});
    } catch (SecurityException e) {
        System.out.println("3");
        e.printStackTrace();
    } catch (NoSuchMethodException e) {
        System.out.println("4");
        e.printStackTrace();
    }

    Object JarredObj = null;
    try {
        JarredObj = Jarred.newInstance();
    } catch (InstantiationException e) {
        System.out.println("5");
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        System.out.println("6");
        e.printStackTrace();
    }

    try {
        Object response = simpleWrite.invoke(JarredObj, "\nHello Mehdi ! It works hamdoulillah :D");
    } catch (IllegalArgumentException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    } catch (InvocationTargetException e) {
        e.printStackTrace();
    }
}
}

以及包含在 Jar 中的类:

package com.jarred.exp;

public class Jarred {

public void simpleWrite(String str) {
    System.out.println(str);
}

}

它给了我:

2
java.lang.ClassNotFoundException: com.jarred.exp.Jarred
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.net.FactoryURLClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at ClassLoad.main(ClassLoad.java:25)
Exception in thread "main" java.lang.NullPointerException
at ClassLoad.main(ClassLoad.java:32)

你对此有什么想法吗?谢谢。


您的文件 URL 似乎无效。

“Windows 中的文件 URI” http://blogs.msdn.com/b/ie/archive/2006/12/06/file-uris-in-windows.aspx says

对于本地 Windows 文件路径

C:\Documents and Settings\davris\FileSchemeURIs.doc

Windows 中对应的有效文件 URI 为:

file:///C:/Documents%20and%20Settings/davris/FileSchemeURIs.doc

这表明三斜杠冒号后面需要,但是您正在计算的 URL

String filePath = new String("C:/Users/Mehdi/Desktop/JavaClassLoader/jarred.jar");

URL myJarFile = null;
try {
    myJarFile = new URL("file://"+filePath);

只有两条斜线之后file:。也许

    myJarFile = new URL("file://"+filePath);

应该

    myJarFile = new URL("file:///"+filePath);

或者你也可以使用java.io.File.toURI http://docs.oracle.com/javase/6/docs/api/java/io/File.html#toURI%28%29 thus

File myJarFile = new File("C:\\Users\\Mehdi\\Desktop\\JavaClassLoader\\jarred.jar");
if (!myJarFile.isFile()) {
  throw new FileNotFoundException("Missing required JAR: " + myJarFile.toString());
}
URL myJarUrl = myJarFile.toURI().toURL();

具有适当的异常处理。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

动态加载 Jar 并实例化已加载类的对象 的相关文章

随机推荐

  • 在 pydantic 中声明计算的 python 级属性

    我有一个类源自pydantic BaseModel并想创建一个 假 属性 即计算属性 property 关键字似乎不能以通常的方式与 Pydantic 配合使用 下面是 MWE 其中类存储值并定义称为的读 写属性half具有明显的意义 使用
  • 使用 __get() (魔术)来模拟只读属性和延迟加载

    我在用着 get http php net manual en language oop5 overloading php使我的一些属性 动态 仅在请求时初始化它们 这些 假 属性存储在私有数组属性中 我正在 get 中检查该属性 无论如何
  • 如何获取数据透视表每行的最大和最小列数?

    非常感谢 约翰卡佩莱蒂 https stackoverflow com users 1570000 john cappelletti他展示了如何旋转桌子 这是一个示例数据 DECLARE OperatorPrice TABLE ID int
  • vuejs2:我如何销毁观察者?

    我怎样才能摧毁这个观察者 当我的异步数据从父组件加载时 我的子组件中只需要一次 export default watch data function this sortBy 格雷戈尔 如果通过调用 vm watch 函数动态构造观察程序 它
  • JAVA:如何将私钥保存在具有密码保护的 pem 文件中

    我正在尝试将私钥保存在pem文件 受密码保护 问题是 pem文件已创建 我 甚至可以用 openssl 打开它 但是不需要密码 这是代码 KeyPairGenerator keygen KeyPairGenerator getInstanc
  • For Each 循环的逆序

    VB 最强大的功能之一是能够循环访问集合中的对象而不引用索引 for each loop 我发现它非常有用 只想从集合中删除对象 当从预定义对象 例如电子表格上的行 中删除对象时 如果我使用索引并从最大的对象开始并返回到第一个 则代码会更简
  • smartpackage 中的 Meteor 项目路径

    我正在寻找一种从智能包中查找流星项目路径的方法 例如 获取 meteor 文件夹所在目录的路径 我无法使用节点的 dirname 和 filename 来完成此操作 因为不知何故在流星中它们不可用 有小费吗 从 Meteor 0 6 0 开
  • 如何等待所有协程完成?

    我正在启动一个协程 我希望它在恢复执行主线程之前完成 我的代码简化如下 fun hello for i in 0 100 println hello fun main args Array
  • 多个环境中的 Azure 云服务项目配置(.csdef 和 .cscfg)

    目前我们有一个开发云服务 acme dev service 和一个生产云服务 acme prod service 我们解决方案中当前的设置有一个名为 acme application 的云服务项目 它使用 cscfg 和 csdef 文件的
  • Firebase 电话身份验证在发布时不起作用 (Android)

    当使用我的应用程序的调试版本时 电话身份验证有效 当我在手机上手动安装发布签名的 apk 时 电话身份验证也有效 但是当我将相同的工作 apk 发布到 Play 商店 Alpha 测试 时 我无法使其工作 经过一番挖掘后得到了这个 此应用无
  • Tidyr 与可选组分开

    我正在尝试使用extract来自 tidyr 包 将包含单个字符串的列拆分为 3 个单独的列 该问题的最小工作示例如下 A tibble 3 x 1 question codes
  • jquery ajax post成功返回数据

    我无法取回我的数据 这是我的代码 哪里有问题 谢谢 索引 php
  • 如何使用嵌套生成器编写 jqwik 生成器方法

    使用 jqwik net 尝试生成一个 Rule 类 其中包含一个嵌套的 RuleConfig 类 RuleConfig 类有一个嵌套的ruleProps 它是一个Map statusReturnedFromApplyingRule 方法始
  • 如何序列化包含指向原语的指针的类?

    我正在尝试使用 boost 的功能来序列化指向原语的指针 这样我就不必自己取消引用并进行深度存储 然而 当我尝试这样做时 我遇到了一堆错误 这是一个应该包含的类的简单示例save and load从文件中写入和读取类内容的方法 该程序无法编
  • 如何访问查询结果? [复制]

    这个问题在这里已经有答案了 我正在编写一个简单的测试来验证 id 列中不同值的数量与每个表的行数匹配 我期望能够访问对象的特定值 但是当我运行代码并尝试打印变量的值时 我可以看到我的对象是一个 sqlalchemy engine resul
  • jQuery 滚动对吗?

    我有以下代码 似乎可以在单击时将 div 一直滚动到左侧 我想知道是否 有一种方法可以让它一次只滚动 200px 我也可以让它向右滚动 试图查看 jQuery 文档 但找不到scrollToRight 函数 这是我的代码 leftArrow
  • 是否可以在 Firebase 上查询 !equalTo: null ?

    我使用此查询来验证我的 Firebase 上是否存在数据 使用 AngularFire2 let aux this afData list drivers query orderByChild accountHistory approved
  • Ruby on Rails“content_for:title”如何获得稍后分配的内容?

    简短的问题是 子页面如何 set the title主要布局 details 我们可以在应用程序布局中使用application html erb
  • 通过终端列出视频设备

    如何通过终端列出计算机的视频设备 有没有列出它们的命令 列出视频output设备 例如监视器 system profiler SPDisplaysDataType 这会产生如下所示的输出 Graphics Displays Intel HD
  • 动态加载 Jar 并实例化已加载类的对象

    我尝试将 jar 动态加载到我的 Java 项目中 这是类加载器的代码 public class ClassLoad public static void main String args String filePath new Strin