【问题标题】:Java: Get a class from an external .jarJava:从外部 .jar 获取类
【发布时间】:2012-03-26 23:35:58
【问题描述】:

我在从外部 .jar 文件中获取类时遇到问题。我在这里找到了this 加载外部.jar 的方法,但是每当我运行它时,我都会得到一个ClassNotFoundException。下面是我正在使用的代码,here 是我正在测试的 .jar。如果有人对如何解决此问题有任何想法,请告诉我。谢谢!

这是我的代码:

@SuppressWarnings({ "rawtypes", "unchecked", "unused" })
public void loadJar() throws MalformedURLException {
    URL[] classes = {new URL("jar:file://test.jar!/")};
    URLClassLoader child = new URLClassLoader (classes, this.getClass().getClassLoader());
    try {
        Class classToLoad = Class.forName ("test.PackageTest", true, child);
        Method method = classToLoad.getDeclaredMethod ("test");
        Object instance = classToLoad.newInstance();
        Object result = method.invoke(instance);
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch (SecurityException e) {
        e.printStackTrace();
    } catch (NoSuchMethodException e) {
        e.printStackTrace();
    } catch (InstantiationException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    } catch (IllegalArgumentException e) {
        e.printStackTrace();
    } catch (InvocationTargetException e) {
        e.printStackTrace();
    }
}

【问题讨论】:

标签: java class url import buildpath


【解决方案1】:

尝试将URL[] classes = {new URL("jar:file://test.jar!/")}; 分解为几个语句

File myFile = new File("test.jar");
URL myJarFileURL = new URL("jar", "", "file:" + myFile.getAbsolutePath() + "!/");
URL[] classes = {myJarFileURL};

您可以将 myFile.getAbsolutePath() 发送到记录器或控制台,并查看类加载器期望在哪里找到 test.jar。然后确保 test.jar 在那个位置。

【讨论】:

    【解决方案2】:

    尝试不使用 jar: 和 URL 中的 !/。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-02
      • 2012-04-27
      • 1970-01-01
      • 1970-01-01
      • 2014-12-04
      相关资源
      最近更新 更多