【发布时间】:2012-03-23 21:53:15
【问题描述】:
这个问题已经在 cmets 的帮助下解决了:
必须使用正确的目标版本重新编译 java。在我的情况下,javac -source 1.3 -target 1.3 而不是简单的javac 成功了。
问题描述:
我有一个已编译的 .jar java 程序,其中需要修改单个 url 字符串。使用 JD 我能够反编译代码并进行更改。
由于我想避免重新编译整个项目,我想我可以简单地将我修改的单个 .java 文件重新编译成 .class 并用它替换原始文件。
但是,在重新打包 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,一切正常。
- 我的修改似乎也不是问题:当我重新编译 JD 反编译的 java 文件并使用生成的类文件进行重新打包时,我遇到了同样的失败。
我反编译了重新打包的 jar 文件,并将其与原始 jar 文件的反编译进行了比较:在我修改的文件中(至少)代码似乎相同但 JD 显示不同的行号。这能暗示问题吗?
任何帮助将不胜感激。
非常感谢!
【问题讨论】:
-
“程序没有运行”非常模糊 - 请提供更多信息。
-
JAR 中的类是针对什么版本的 Java 编译的?您使用什么版本的 Java 重新编译该类?您收到的错误消息是什么?
-
一般情况下应该这样工作。正如 John 所说,我们需要有关该问题的更多信息 - 您是否看到异常情况?
-
好的,我发现问题描述太模糊了。请参阅修改后的问题。我不确定这些类是针对哪个版本的 java 编译的。我怎样才能知道?
-
从我看到的设备上安装的 java 版本是 cvm 1.3。我用当前的 JDK (Java SE 7) 重新编译了 .java 文件。这可能是问题吗?
标签: java decompiling