2016-04-20 13 views
0

シェルを表示する限り、起動可能な.jarがあります。私はこのラインを持つ新しいダイアログを作成し、リスナーを持っているボタン押したときしかし、: JSONParser parser = new JSONParser(); をそれは私がJSON-シンプル-1.1.1.jar持っているが、私にはないException in thread "main" java.lang.NoClassDefFoundError: org/json/simple/parser/ParseExceptionSWTJarと外部ライブラリ

をクラッシュクラスローダがそれを取得するようにどこに置くべきかを知っている。

Eclipse環境内から起動したときにうまく動作するので、この問題が発生したSWTJarのjar-in-jar-loaderの世界にいるときだけです。

+0

それはあなたのjarファイルと一緒にエクスポートされるかどうかをチェックしましたか? json-simple-1.1.1.jarを実行可能ファイルと同じフォルダに配置しようとしましたか? – Calon

+0

これはSWTJarで作成されたjarファイルで、jarファイルが – pretzalcoatl

+0

であるフォルダにあります。これはビルド構成にも含まれていますか? (プロジェクトのbuild.properties) – Calon

答えて

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(); 
    } 
+0

これはjfaceでは機能しません。私のメインクラスがロードされる前にクラスローダーがorg.swtjar.SWTLoader行48にロードしようとしているようです。そうしすぎると、それをやろうとしています。 実際に.jarsから.classファイルを抽出してその作業を行う必要があります – pretzalcoatl

関連する問題