Java Can';t重新编译反编译的类文件

Java Can';t重新编译反编译的类文件,java,decompiling,recompile,Java,Decompiling,Recompile,我有一些Java我想编辑(它是一个Minecraft mod),我反编译了.class文件(使用JDGUI),编辑了我想要的,然后尝试重新编译(使用javac) 我犯了几百个错误。不过我只编辑了几行,所以我试着编译未经编辑的.java,就像从反编译器编译的一样。同样的事情,成百上千的错误 对Java知之甚少,所以我肯定我犯了一些错误。为什么它不能编译未从有效的工作类文件编辑的代码 以下是我得到的一个示例: ReiMinimap.java:451: illegal start of express

我有一些Java我想编辑(它是一个Minecraft mod),我反编译了.class文件(使用JDGUI),编辑了我想要的,然后尝试重新编译(使用javac)

我犯了几百个错误。不过我只编辑了几行,所以我试着编译未经编辑的.java,就像从反编译器编译的一样。同样的事情,成百上千的错误

对Java知之甚少,所以我肯定我犯了一些错误。为什么它不能编译未从有效的工作类文件编辑的代码

以下是我得到的一个示例:

ReiMinimap.java:451: illegal start of expression
              switch (???)
              ^
ReiMinimap.java:451: ';' expected
              switch (???)
                    ^
ReiMinimap.java:451: illegal start of expression
              switch (???)
                      ^
ReiMinimap.java:451: illegal start of expression
              switch (???)
                        ^
ReiMinimap.java:451: illegal start of expression
              switch (???)
                         ^
ReiMinimap.java:452: illegal start of expression
              {
              ^
ReiMinimap.java:452: : expected
              {
               ^
ReiMinimap.java:453: ';' expected
              case 49:
                     ^
ReiMinimap.java:453: ')' expected
              case 49:
                      ^
ReiMinimap.java:454: illegal start of expression
                this.allowCavemap = true;
                    ^
ReiMinimap.java:454: ';' expected
                this.allowCavemap = true;
                     ^
ReiMinimap.java:454: illegal start of expression
                this.allowCavemap = true;
                                  ^
ReiMinimap.java:454: ';' expected
                this.allowCavemap = true;
                                   ^
ReiMinimap.java:456: orphaned case
              case 50:
              ^
ReiMinimap.java:308: 'try' without 'catch' or 'finally'
    try { if (paramMinecraft == null);
    ^
ReiMinimap.java:499: illegal start of type
      else
      ^
ReiMinimap.java:499: ';' expected
      else
          ^
ReiMinimap.java:501: illegal start of type
        this.chatWelcomed = true;
        ^
ReiMinimap.java:501: <identifier> expected
        this.chatWelcomed = true;
            ^
ReiMinimap.java:501: ';' expected
        this.chatWelcomed = true;
             ^
ReiMinimap.java:501: illegal start of type
        this.chatWelcomed = true;
                          ^
ReiMinimap.java:501: <identifier> expected
        this.chatWelcomed = true;
                           ^
ReiMinimap.java:451:表达式的非法开始
开关(?)
^
java:451:“;”预期
开关(?)
^
java:451:表达式的非法开始
开关(?)
^
java:451:表达式的非法开始
开关(?)
^
java:451:表达式的非法开始
开关(?)
^
java:452:表达式的非法开始
{
^
java:452::应为
{
^
java:453:“;”应为
案例49:
^
java:453:“)”应为
案例49:
^
java:454:表达式的非法开始
this.allowCavemap=true;
^
java:454:“;”应为
this.allowCavemap=true;
^
java:454:表达式的非法开始
this.allowCavemap=true;
^
java:454:“;”应为
this.allowCavemap=true;
^
java:456:孤立案例
案例50:
^
java:308:“try”不带“catch”或“finally”
尝试{if(paraminecraft==null);
^
java:499:类型的非法开始
其他的
^
java:499:“;”应为
其他的
^
java:501:类型的非法开始
这是真的;
^
java:501:应为
这是真的;
^
java:501:“;”应为
这是真的;
^
java:501:类型的非法开始
这是真的;
^
java:501:应为
这是真的;
^
还有一些代码:

if ((!this.chatWelcomed) && (System.currentTimeMillis() < this.chatTime + 10000L))
      {
        Object localObject1;
        for (localObject2 = this.chatLineList.iterator(); ((Iterator)localObject2).hasNext(); ) { localObject1 = (ahe)((Iterator)localObject2).next();

          if ((localObject1 == null) || (this.chatLineLast == localObject1)) break;
          Matcher localMatcher1 = Pattern.compile("§0§0((?:§[1-9a-d])+)§e§f").matcher(((ahe)localObject1).a);
          while (localMatcher1.find())
          {
            this.chatWelcomed = true;
            for (??? : localMatcher1.group(1).toCharArray())
            {
              switch (???)
              {
              case 49:
                this.allowCavemap = true;
                break;
              case 50:
                this.allowEntityPlayer = true;
                break;
              case 51:
                this.allowEntityAnimal = true;
                break;
              case 52:
                this.allowEntityMob = true;
                break;
              case 53:
                this.allowEntitySlime = true;
                break;
              case 54:
                this.allowEntitySquid = true;
                break;
              case 55:
                this.allowEntityLiving = true;
              }
            }
          }
if((!this.chattometed)和&(System.currentTimeMillis()
听起来像是原始Java编译被混淆了。混淆者使用了许多技巧,使得代码的逆向工程变得困难。例如,在.class文件中使用方法和字段名是合法的,这些名称在Java源代码中是保留字(
For
if
,等等)如果混淆器使用了这些技巧,那么当您反编译.class文件时,Java源代码是非法的,因为您不能将这些保留字用作方法或字段名。

事实上,我也发现了这一点,混淆器的设计正是为了使这种反向工程更加困难。您可能会有更多的运气与尝试重新编译反编译的源代码相比,重新编译底层字节码。没有任何代码看起来是模糊的,我看到过模糊的代码,这看起来不是。编译时是否将原始库添加到类路径中?就示例而言,您是否只想让我复制整个错误日志?另外:原始库?我知道编程和其他不相关的语言,但几乎与Java无关。不确定你的意思。这可以解释我为什么会有问题…@zeel:不一定。只显示一个错误类型和导致错误的代码的示例。我们不知道你的屏幕上有什么,所以不可能正确诊断。添加了一个wha示例泽尔:你仍然没有显示实际的代码。但是“开关(??)”不是一种有效的Java。找一个更好的反编译器。