首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用Jode反编译*任何*类时遇到问题

在使用Jode反编译*任何*类时遇到问题
EN

Stack Overflow用户
提问于 2009-10-10 21:17:12
回答 4查看 1.6K关注 0票数 0

我已经盯着这个问题看了好几个小时了。任何帮助都是非常感谢的。

我编写了使用“嵌入式Jode jar文件”中的jode反编译器的代码。我想使用这个版本,因为它遵循Lesser GNU Public License。

代码语言:javascript
复制
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();
}

我总是得到这样的回答:

代码语言:javascript
复制
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)

如果我使用

代码语言:javascript
复制
jode.decompiler.Main.decompile(...)

一切正常--但我不能使用这个类文件,因为它驻留在只有GPL的jode.jar中。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-10-15 01:49:13

我能够用他们的网站上提供的jode的所有不同的二进制版本重现这个问题。当我使用svn的主线构建一个新版本的jode时,它工作得很好。我还在jode的一个论坛上看到了一个条目,其中有一个用户抱怨NoClassDefFound问题。他的情况听起来略有不同,但jode开发人员建议他使用svn中的主线,而不是预构建二进制文件。

票数 1
EN

Stack Overflow用户

发布于 2009-10-10 21:42:22

代码语言:javascript
复制
d.setClassPath("C:\\mycode");

在我看来,这个类路径太短了。

票数 0
EN

Stack Overflow用户

发布于 2009-10-10 22:12:43

更新:我最初的假设是错误的,更糟糕的是,据我所知,最初的异常/消息被丢弃了。JODE失败的代码如下所示:

代码语言:javascript
复制
 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);
        }

由于必须抛出IOException才能获得NoClassDefFound,因此请检查有关IO子系统的任何内容,例如file.encoding。我想您应该修补JODE以获取详细的错误消息或调试到这一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1549098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档