0

我对 java 编译器的理解遇到了一些问题。

如果您了解 Minecraft,您可能知道游戏中有许多 mods,它们是注入原始 .jar 的修改类的片段,替换旧的(原始).class,问题是如果您想使用 2 个不同的替换相同 .class 的 mod,这有点不可能,除非您将它们的代码混合并做一些版本。

好吧,我得到了 2 个使用相同 .class 的模块并反编译了两个类(反编译成功),分析、修改并创建了一个同时适用于两个模块的 .java 文件。我现在的问题是我必须将这个 .java 重新编译成一个 .class 文件,这样我才能注入到 minecraft .jar 中,但是每次我尝试编译它时,我都会遇到很多错误,比如class, interface, or enum expected那些selection does not contain main type错误是预料之中的,因为代码中提到了很多外部类,实际上并没有包含 main 类型。

我想知道你们中是否有人知道将 .java 转换为 .class 二进制文件,而忽略我之前提到的所有错误,或者您对我该怎么做有任何其他建议它。

PS:这段代码不是一个完整的程序,这就是我得到这些错误的原因,它在.jar中会很好地工作,请不要回答单独编译这个文件是没有意义的。

4

1 回答 1

1

我想知道你们中是否有人知道将 .java 转换为 .class 二进制文件而忽略所有错误...

这不可能。如果其中有错误,您不能“强制”编译 Java 源代码,听起来这就是问题所在。

  • Java 反编译器生成无效 Java 源代码的输出并不罕见。

  • 如果您在“分析、修改、创建”中犯了错误,您的源代码可能无效……尤其是在您似乎没有 Java 编程经验的情况下。


如果您发布实际的源代码片段和实际的编译错误,我们可能会提供帮助。


跟进

我有java编程经验,只是我使用Eclipse为我编译东西,所以我从不通过命令行使用javac。

那不是问题。如果您尝试使用 Eclipse 编译此代码,您会遇到同样的问题。

如果无法重新编译出现错误的类,我可以使用一些解压缩反编译的程序在 .jar 中编辑一个类,显示代码以便我可以再次编辑和打包它吗?

理论上,是的。在实践中,您需要对字节码以及编译代码的工作方式有很好的理解才能实现这一点。特别是,如果你弄错了,你可能会在类加载时遇到神秘的异常。

输入类被混淆的事实部分解释了为什么反编译器难以生成可编译代码。

于 2012-07-15T04:46:15.707 回答