在评论的帮助下,此问题已得到解决:
有必要使用正确的目标版本重新编译java。在我的情况下javac -source 1.3 -target 1.3
而不仅仅是javac
就可以了。
问题描述:
我有一个编译好的.jar java程序,其中需要修改单个url字符串。使用JD我能够反编译代码并进行更改。
由于我想避免重新编译整个项目,我认为我可以简单地重新编译我修改为.class的单个.java文件并用它替换原始文件。
然而,在重新打包jar之后,程序确实启动了,但是使用我修改的代码的功能表现不正常。
在日志中我找到:
E EventDispatchThreadExceptionHandler:Unhandled exception occurred during event dispatching.::
java.util.MissingResourceException: Can't find bundle for base name com.myCompany.mySoftware.resources.ModuleResources, locale en_US
at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:842)
ModuleResources.java是我修改过的文件......
问题分析:
我反编译了重新打包的jar文件,并将其与原始jar文件的反编译进行了比较:在我修改的文件中(至少)代码看起来是相同的但是JD显示了不同的行号。这可以暗示这个问题吗?
非常感谢任何帮助。
非常感谢!
答案 0 :(得分:0)
当我重新编译JD反编译的java文件并使用生成的类文件进行重新打包时,我得到了相同的失败
这似乎指向JD。重新编译JD反编译的java文件时,是否可以将结果与原始.class
文件进行比较(例如,通过反汇编并比较结果)?如果它们的实质不同,那将证明JD有过错的理论;如果他们不这样做,那么问题出在其他地方。
答案 1 :(得分:0)
这是个老问题。
如今,我找到了一种反编译并重新打包jar文件的好方法。
这是好文件。
https://www.talksinfo.com/how-to-edit-class-file-from-a-jar/
我推荐文档中的第三种方法。!!!