SWTJar和外部库

时间:2016-04-20 05:26:26

标签: java eclipse swt

我有一个可启动的.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世界时才会遇到这个问题。

1 个答案:

答案 0 :(得分:0)

刚想通了:

在我调用构造函数之前,在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();
    }