Jode와 함께 모든 * 클래스를 디 컴파일하는 데 문제가 있습니다

StackOverflow https://stackoverflow.com/questions/1549098

  •  20-09-2019
  •  | 
  •  

문제

나는 지금이 문제를 몇 시간 동안 쳐다보고 있습니다. 모든 도움이 감사합니다.

"내장 Jode Jar 파일"에서 Jode 디 컴파일러를 사용하는 코드를 작성했습니다. 이 버전은 덜 GNU 공개 라이센스에 따라 사용하고 싶습니다.

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

그리고 나는 항상 얻는다 :

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)

내가 사용하는 경우

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

일이 작동하지만이 클래스 파일은 jode.jar에있는 GPL이기 때문에이 클래스 파일을 사용할 수 없습니다.

도움이 되었습니까?

해결책

웹 사이트에서 제공되는 모든 바이너리 버전의 Jode에서 문제를 재현 할 수있었습니다. SVN의 메인 라인을 사용하여 새 버전의 Jode를 만들었을 때 잘 작동했습니다. 또한 Jode 포럼 중 하나에서 사용자가 NoclassDeffound 문제에 대해 불평하는 항목을 보았습니다. 그의 사례는 약간 다르게 들렸지 만 Jode 개발자는 Prebuild Binary 대신 SVN의 메인 라인을 사용한다고 제안했습니다.

다른 팁

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

이 클래스 경로는 나에게 끔찍하게 보입니다.

수업을 디 컴파일하는 것을 좋아하지 않기 때문에 이것은 추측입니다. 그러나 나는 당신이 사용해야한다고 생각합니다.

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

당신이 지금 사용하는 대신. 이것은 비슷할 수 있습니다

Class.forName("ClassName")

"클래스"접미사없이.

업데이트 : 내 원래 가정은 잘못되었고 나쁘게 AI가 볼 수 있듯이 원래의 예외/ 메시지가 버려졌습니다. Jode가 실패하는 코드는 다음과 같습니다.

 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);
        }

noclassDeffound를 얻기 위해 ioexception을 던져야하므로 io subsytsem과 관련하여 무엇이든 확인하십시오. 자세한 오류 메시지를 받거나이 시점까지 디버그를 가져 오려면 Jode를 패치해야한다고 생각합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top