Frage

Ich habe jetzt stundenlang mit diesem Thema gestarrt. Jede Hilfe ist willkommen.

schrieb ich Code, der die Jode Decompiler von der "embedded jode JAR-Datei" verwendet. Ich mag diese Version benutzen, weil es unter der Lesser GNU Public License ist.

Decompiler d = new Decompiler();
try {
    FileWriter fw = new FileWriter("c:\\jode.txt");

    d.setClassPath("C:\\mycode");

    ProgressListener p = new ProgressListener() {

        public void updateProgress(double arg0, String arg1) {
            System.out.println("inside of progress listener with arg0 = " +arg0+ " and arg1 = " +arg1);
        }
    };

    d.decompile("Test.class" , fw, p);

} catch (Exception ex) {
    ex.printStackTrace();
}

und ich immer bekommen:

Exception in thread "main" java.lang.NoClassDefFoundError: Test.class
        at jode.bytecode.ClassInfo.loadInfo(ClassInfo.java:620)
        at jode.decompiler.ClassAnalyzer.<init>(ClassAnalyzer.java:86)
        at jode.decompiler.ClassAnalyzer.<init>(ClassAnalyzer.java:123)
        at jode.decompiler.Decompiler.decompile(Decompiler.java:191)
        at testdecompiler.Main.main(Main.java:45)

Wenn ich

jode.decompiler.Main.decompile(...)

Dinge Arbeit -. Aber ich kann nicht diese Klassendatei verwenden, da es in der jode.jar befindet, die GPL ist nur

War es hilfreich?

Lösung

Ich war in der Lage, das Problem mit all den verschiedenen binären Versionen von jode zu reproduzieren, die von ihrer Website zur Verfügung stehen. Wenn ich eine neue Version von jode mit der Hauptstrecke von SVN gebaut, es funktionierte gut. Ich sah auch einen Eintrag in einer der jode Foren, in denen ein Benutzer über das NoClassDefFound Problem beschwert. Sein Fall klang etwas anders, aber der jode Entwickler schlug vor, dass er die Hauptstrecke von SVN anstelle des vorkompilierte Binär.

Andere Tipps

d.setClassPath("C:\\mycode");

Dieses Classpath sieht furchtbar kurz zu mir.

Dies ist eine Vermutung, wie ich Lust, mich nicht mit Klassen dekompiliert, aber ich denke, dass u verwenden sollte

d.decompile("Test" , fw, p);

statt, was u jetzt verwenden. Dies könnte ähnlich sein

Class.forName("ClassName")

ohne die "Klasse" Suffix.

Update: Meine ursprüngliche Annahme falsch war, und zu schlecht, wird die ursprüngliche Ausnahme / Nachricht weggeworfen, wie weit ein ich sehen kann. Der Code, wo JODE sieht wie folgt ausfällt:

 try {
      DataInputStream input = new DataInputStream
          (new BufferedInputStream
           (classpath.getFile(name.replace('.', '/') + ".class")));
        read(input, howMuch);            

  } catch (IOException ex) {
        String message = ex.getMessage();
      if ((howMuch & ~(FIELDS|METHODS|HIERARCHY
                       |INNERCLASSES|OUTERCLASSES)) != 0) {
          throw new NoClassDefFoundError(name);
        }

Da eine IOException hat geworfen werden, um den NoClassDefFound, Scheck etwas in Bezug auf Ihrer IO subsytsem zu erhalten, zum Beispiel die file.encoding. Ich denke, man sollte JODE Patch die detaillierte Fehlermeldung oder Debug zu diesem Punkt zu gelangen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top