new java.math.BigDecimal(int arg)在 jdk1.5 引发的错误:
Caused by: java.lang.NoSuchMethodError: java.math.BigDecimal.<init>(J)V
at highsoft.yxgl.yk.worksheet.form.AppRegForm.generateAppDefaultInfo(AppRegForm.java:490)
at highsoft.yxgl.yk.worksheet.form.AppRegForm.initNewApp(AppRegForm.java:437)
at highsoft.yxgl.yk.worksheet.action.AppRegAction.initAppData(AppRegAction.java:664)
at highsoft.yxgl.yk.worksheet.action.AppRegAction.initForm(AppRegAction.java:60)
... 27 more
换用jdk1.4可以正常
以下是找到相关的问题
========================
开发环境是jdk1.5,部署环境是jdk1.4,用ANT编译程序的时候已经指定了-source 1.4,以前都没问题,最近出问题了。GOOGLE了一下,发现是因为使用了BigDecimal,
以下摘自:http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6226858
As part of jsr 13, a new constructor, BigDecimal(int val), was added to BigDecimal in JDK 5. Therefore, in 1.4 and earlier
new BigDecimal(1)
in the source resolves to BigDecimal(double) while in 1.5 it resolves to BigDecimal(int), which is not present in earlier JDKs. The -source flag of javac only restricts the constructs in the source languge (e.g. assert, generics); it does *not* restrict or filter the contents of the libraries. Therefore, in JDK5 if you compile with "javac -source 1.4" you will still be compiling against the 1.5 version of the libraries. Therefore, in cases like the one in this bug, code compiled at a lower language level might not be able to be used with an ealier release supporting that language level.
To match both the language and libraries of an ealier jdk, use -source and the -bootclasspath flag to specify the earlier rt.jar as well. Of course the ealier jdk could be used too.
Caused by: java.lang.NoSuchMethodError: java.math.BigDecimal.<init>(J)V
at highsoft.yxgl.yk.worksheet.form.AppRegForm.generateAppDefaultInfo(AppRegForm.java:490)
at highsoft.yxgl.yk.worksheet.form.AppRegForm.initNewApp(AppRegForm.java:437)
at highsoft.yxgl.yk.worksheet.action.AppRegAction.initAppData(AppRegAction.java:664)
at highsoft.yxgl.yk.worksheet.action.AppRegAction.initForm(AppRegAction.java:60)
... 27 more
换用jdk1.4可以正常
以下是找到相关的问题
========================
开发环境是jdk1.5,部署环境是jdk1.4,用ANT编译程序的时候已经指定了-source 1.4,以前都没问题,最近出问题了。GOOGLE了一下,发现是因为使用了BigDecimal,
以下摘自:http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6226858
As part of jsr 13, a new constructor, BigDecimal(int val), was added to BigDecimal in JDK 5. Therefore, in 1.4 and earlier
new BigDecimal(1)
in the source resolves to BigDecimal(double) while in 1.5 it resolves to BigDecimal(int), which is not present in earlier JDKs. The -source flag of javac only restricts the constructs in the source languge (e.g. assert, generics); it does *not* restrict or filter the contents of the libraries. Therefore, in JDK5 if you compile with "javac -source 1.4" you will still be compiling against the 1.5 version of the libraries. Therefore, in cases like the one in this bug, code compiled at a lower language level might not be able to be used with an ealier release supporting that language level.
To match both the language and libraries of an ealier jdk, use -source and the -bootclasspath flag to specify the earlier rt.jar as well. Of course the ealier jdk could be used too.
本文解决了一个因使用不同JDK版本而导致的BigDecimal构造器问题。在从JDK1.4升级到1.5后,由于BigDecimal(int)构造器的引入,原本针对double类型的构造调用在1.5中被解析为int类型,导致NoSuchMethodError错误。文章提供了通过调整编译选项和bootclasspath来确保代码能在较低版本JDK上正确运行的方法。
3475

被折叠的 条评论
为什么被折叠?



