精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-01-17
最后修改:2009-02-16
今天本来打算察看jdk把foreach转换为什么样子的字节码,发现无法正确打开class文件!出现如图错误
1 翻译JDK问题:和以前的差别只是jdk从1.5切换到了现在的1.6了,看提示是MessageFormat.applyPattern有错,难道jdk1.6修改了这个导致不匹配了!切换到了1.5的jdk,打开后依然错误。当时我认为可能是jdk代码修改了,分别打开他们了的源代码,然后查看发现两者并无特别的差异,排除jdk故障! 2 怀疑是安装了插件导致:重新使用原始的eclipse3.3的包再次测试,竟然一切正常!晕,看样子可以确认是安装了插件导致的!到底是什么插件呢 :( 仔细看错误的异常堆栈,发现全部都是eclipse的专用类,故开始跟踪代码,从里向外走 a java.text.MessageFormat.applyPattern(MessageFormat.java:468)——〉throw new IllegalArgumentException("Unmatched braces in the pattern."); 异常是参数错误导致的,也就是这个pattern错误,继续跟踪代码发现这个pattern在 b org.eclipse.jdt.internal.core.util.Disassembler.disassemble(Disassembler.java:883) --〉buffer.append(Messages.bind(Messages.disassembler_opentypedeclaration)); 是的传递给MessageFormat.applyPattern的pattern就是Messages.disassembler_opentypedeclaration;故猜测错误就在这个Messages.disassembler_opentypedeclaration有问题 c 察看Messages类 发现BUNDLE_NAME = "org.eclipse.jdt.internal.core.util.messages";同时回忆自己安装了汉化包,说明一定是汉化包里面的资源文件有问题,打开message.properties后找到配置disassembler_opentypedeclaration =\ '{';然后打开汉化包:org.eclipse.jdt.core.nl_zh_3.3.0.v20081123043401.jar里面对应的资源文件查看发现:他们确实不一样如图修改
d 新的问题:满怀希望打开eclipse竟然出现了新问题,如图: E试验 禁用语言包打开eclipse,然后打开class文件查看结果如图对比他们的差异
第一行://disassembler_fieldhasconstant = =编译自disassembler_enclosingmethodheader = 外层方法:TestLoop.java (版本 1.5:49.0,超级位) 正确的为:// Compiled from TestLoop.java (version 1.5 : 49.0, super bit) 确认:disassembler_fieldhasconstant和disassembler_enclosingmethodheader 未正确解析 对比两个资源文件得到结论:disassembler_begincommentline=//disassembler_fieldhasconstant \= \= 未正确拆分为两行导致的,修改为: disassembler_begincommentline = //\ 启用汉化插件,重新打开eclipse察看class,确实有改变了,故此发现故障出现地方!
不断地修改message即可完全解决问题,解决问题后的messages_zh文件为:messages_zh.properties 至此问题彻底解决(我把一些他们没有翻译为中文的配置都干掉了 ^ ^)
经验: 1 发布的东西不见得没有bug, ^ ^ 2 英文要学好,E文不好就不去汇报bug了 3 调试功底需要不断的摸索才可以提高!
可能有人说无法察看源代码,那就需要rcp开发版了,我的环境是eclipse-rcp 3.3版本的!故可以查看eclipse的源代码! 直接建立eclipse插件项目,然后把jdt包引入,通过查找java类就可以快速定位源代码了 ^ ^
2009-02-14 修改后的文件properties_zh.properties
2009-02-16 今天我发现了语言包依然有问题,原来在English版本下可以使用的到中文下无法正常使用了!具体是:JInto的快速提示如果选中的话,导致快速提示失败,如果不选中又发现快速提示中的文字出现了乱码,具体是函数的返回值描述部分 符号":"变成了\xU123,具体不太清楚了,反正感觉就是这个message有问题导致了eclipse运行有问题。
现在发现了问题,也明白了为什么开源需要大家参与,如果我们不去修复这些问题,那么后来人就会对软件失去信心,或者对软件形成错误的认识(eclipse本身就无法实现这个功能),国内使用中文的需求还是比较大的,如果我们不贡献力量,对于国内软件的发展确实存在小小的影响,开源的意义还是很重要的!而且非常重要!^ ^
又发现了一个bug:有6个国际化文件的中文化有问题,表现在":"被错误转化了多了一个"\"变成了两个"\\"导致错误国际化了,解决办法:使用rar搜索*.properties文件中的\\u????(具体不记得了),然后再修复错误即可^ ^ 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-01-17
用什么语言包啊 浪费时间么
|
|
返回顶楼 | |
发表时间:2009-01-23
有呵呵,搞Eclipse RCP当然需要国际化了!
所以汉化还是需要的!自从3.3后国际化幸亏有宝贝项目来保证! |
|
返回顶楼 | |
发表时间:2009-02-14
今天打算开始使用eclipse3.4,发现这个bug依然存在,打算解决这个问题:
java.lang.IllegalArgumentException: Unmatched braces in the pattern. at java.text.MessageFormat.applyPattern(MessageFormat.java:476) at java.text.MessageFormat.<init>(MessageFormat.java:350) at java.text.MessageFormat.format(MessageFormat.java:811) at org.eclipse.jdt.internal.core.util.Messages.bind(Messages.java:384) at org.eclipse.jdt.internal.core.util.Messages.bind(Messages.java:350) at org.eclipse.jdt.internal.core.util.Disassembler.disassemble(Disassembler.java:932) at org.eclipse.jdt.internal.core.util.Disassembler.disassemble(Disassembler.java:290) 1 创建RCP项目,添加org.eclipse.jdt.core依赖 2 打开文件org.eclipse.jdt.internal.core.util.Disassembler 第932行 然后快速定位到资源文件org.eclipse.jdt.internal.core.util.messages 打开语言包文件 \eclipse-rcp-ganymede-SR1-win32\eclipse\plugins\org.eclipse.jdt.core.nl_zh_3.4.0.v20090208043401.jar 解压messages_zh.properties文件 根据上次的解决(空格被错误翻译了,空格为"\ "翻译后变成了"\"成了续行符号了)搜索"\\$"替换为"\ "就可以解决这个问题了! 还有个别的再改改基本就可以正确了 |
|
返回顶楼 | |
浏览 4434 次
java.lang.IllegalArgumentException: Unmatched braces in the pattern.
at java.text.MessageFormat.applyPattern(MessageFormat.java:476)
at java.text.MessageFormat.<init>(MessageFormat.java:350)
at java.text.MessageFormat.format(MessageFormat.java:811)
at org.eclipse.jdt.internal.core.util.Messages.bind(Messages.java:384)
at org.eclipse.jdt.internal.core.util.Messages.bind(Messages.java:350)
at org.eclipse.jdt.internal.core.util.Disassembler.disassemble(Disassembler.java:932)
at org.eclipse.jdt.internal.core.util.Disassembler.disassemble(Disassembler.java:290)
1 创建RCP项目,添加org.eclipse.jdt.core依赖
2 打开文件org.eclipse.jdt.internal.core.util.Disassembler 第932行
然后快速定位到资源文件org.eclipse.jdt.internal.core.util.messages
打开语言包文件
\eclipse-rcp-ganymede-SR1-win32\eclipse\plugins\org.eclipse.jdt.core.nl_zh_3.4.0.v20090208043401.jar
解压messages_zh.properties文件
根据上次的解决(空格被错误翻译了,空格为"\ "翻译后变成了"\"成了续行符号了)搜索"\\$"替换为"\ "就可以解决这个问题了!
还有个别的再改改基本就可以正确了