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