【问题标题】:SWTJar and external librariesSWTJar 和外部库
【发布时间】:2016-04-20 14:02:54
【问题描述】:

我有一个可启动的 .jar,只要它显示 shell。但是,当我按下一个具有侦听器的按钮时,该侦听器会创建一个具有此行的新对话框: JSONParser parser = new JSONParser(); 它崩溃了Exception in thread "main" java.lang.NoClassDefFoundError: org/json/simple/parser/ParseException

我有 json-simple-1.1.1.jar,但我不知道放在哪里,所以类加载器会得到它。

从 eclipse 环境中启动时工作正常,所以只有当我在 SWTJar 的 jar-in-jar-loader 世界中时我才会遇到这个问题。

【问题讨论】:

  • 您是否检查过它是否与您的 jar 一起导出?您是否尝试将 json-simple-1.1.1.jar 与可执行文件放在同一文件夹中?
  • 它在使用 SWTJar 创建的 jar 中,并且在 jar 所在的文件夹中
  • 嗯,它也在你的构建配置中吗? (项目中的 build.properties)

标签: java eclipse swt


【解决方案1】:

刚刚想通了:

在SWTJar构建的targetmainclass的main()方法中,在我调用构造函数之前:

      URLClassLoader cl;
    try {
        cl = (URLClassLoader)SWTLoader.class.getClassLoader();
          Method addUrlMethod = URLClassLoader.class.getDeclaredMethod("addURL", URL.class);
          addUrlMethod.setAccessible(true);

          URL jsonsimpleUrl = new URL("rsrc:json-simple-1.1.1.jar");
          addUrlMethod.invoke(cl, jsonsimpleUrl);
    } catch (NoSuchMethodException | SecurityException | MalformedURLException | IllegalAccessException
            | IllegalArgumentException | InvocationTargetException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

【讨论】:

  • 这不适用于 jface;类加载器似乎正试图在我的主类加载之前将其加载到 org.swtjar.SWTLoader 第 48 行,或者它试图过早地加载它。我必须实际从 .jar 中提取 .class 文件才能使其正常工作
猜你喜欢
  • 2014-04-27
  • 2014-03-19
  • 2011-10-21
  • 2015-01-09
  • 2011-06-02
  • 2014-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多