`
dcaoyuan
  • 浏览: 307369 次
社区版块
存档分类
最新评论

A Regress Bug in java.awt.geom.Path2D (JDK 6.0 beta 2)

阅读更多

I tested AIOTrade on newly downloaded JDK 6.0 beta 2, and got an exception instantly:

java.lang.ArrayIndexOutOfBoundsException: 0
    at java.awt.geom.Path2D$Float.moveTo(Path2D.java:322)
    at java.awt.geom.Path2D$Float.append(Path2D.java:643)
    at java.awt.geom.Path2D.append(Path2D.java:1780)

The code run good in JDK 5.0, so will it be a regress bug in JDK 6.0?

I then checked the source code: 6.0 vs 5.0, and found there were likely a bit of code omited wrongly. That is, in method body of void needRoom(boolean needMove, int newCoords), should add

                if (grow < 1) {
                    grow = 1;
                }
at the next of:
            int size = pointTypes.length;
            if (numTypes >= size) {
                int grow = size;
                if (grow > EXPAND_MAX) {
                    grow = EXPAND_MAX;
                }

The following is the proper code I've tested OK:

        void needRoom(boolean needMove, int newCoords) {
            if (needMove && numTypes == 0) {
                throw new IllegalPathStateException("missing initial moveto "+
                        "in path definition");
            }
            int size = pointTypes.length;
            if (numTypes >= size) {
                int grow = size;
                if (grow > EXPAND_MAX) {
                    grow = EXPAND_MAX;
                }
                /** fix bug:
                 * java.lang.ArrayIndexOutOfBoundsException: 0
                 *     at java.awt.geom.Path2D$Float.moveTo(Path2D.java:322)
                 *     at java.awt.geom.Path2D$Float.append(Path2D.java:643)
                 *     at java.awt.geom.Path2D.append(Path2D.java:1780)
                 */
                if (grow < 1) {
                    grow = 1;
                }
                pointTypes = Arrays.copyOf(pointTypes, size+grow);
            }
            size = floatCoords.length;
            if (numCoords + newCoords > size) {
                int grow = size;
                if (grow > EXPAND_MAX * 2) {
                    grow = EXPAND_MAX * 2;
                }
                if (grow < newCoords) {
                    grow = newCoords;
                }
                floatCoords = Arrays.copyOf(floatCoords, size+grow);
            }
        }

As I can not wait for it be fixed in JDK, so I wrote another org.aiotrade.util.awt.geom.Path2D and org.aiotrade.util.awt.geom.GeneralPath, and replaced the java.awt.geom.GeneralPath in my source tree. you can get the code at:

GeneralPath.java
Path2D.java

分享到:
评论

相关推荐

    nlinfit+regress_data fitting.rar_作物模型_农作物_数据拟合regress+nlinfit

    本资料"nlinfit+regress_data fitting.rar_作物模型_农作物_数据拟合regress+nlinfit"聚焦于利用数学模型来描述农作物的水分生产函数,并通过数据分析工具进行参数拟合。这个过程涉及到多个关键知识点,包括作物模型...

    PyPI 官网下载 | regress-0.0.3.tar.gz

    "regress-0.0.3.tar.gz"就是这样一个从PyPI官网下载的Python库,它的版本号为0.0.3,以tar.gz格式压缩。 首先,我们来了解什么是tar.gz文件。这是一种常见的文件打包格式,由“tar”命令用于将多个文件或目录打包成...

    regress-515.rar_The Crash

    在IT行业中,尤其是在软件开发和测试领域,"regress-515.rar_The Crash"这个标题暗示了一个关于软件回归测试的问题。回归测试是当软件系统或应用经历更新、修复或增强后,重新运行之前已经通过的测试用例,以确保新...

    regress-318.rar_crash

    标题“regress-318.rar_crash”和描述中的“Should not crash or raise an exception.”都指向了一个软件错误或漏洞的问题,特别是与程序崩溃或引发异常相关。在这个上下文中,“regress”通常指的是在软件更新或...

    regress_stata.do

    regress_stata.do

    gen_regress_status.csh

    gen_regress_status.csh

    matlab的regress函数实现回归分析.zip

    在MATLAB中,`regress`函数是进行线性回归分析的重要工具,它可以帮助我们建立一个线性模型,以理解自变量与因变量之间的关系。本资料包`matlab的regress函数实现回归分析.zip`可能包含了一个示例代码`code_resource...

    plot_regress_accuary.py

    plot_regress_accuary.py

    线性回归使用数据.csv

    for ax in plt.gcf().get_axes(): ax.plot(X_test, model.predict(X_test), color='red') plt.tight_layout() plt.show() ``` 在机器学习中,线性回归不仅用于预测,还常用于特征选择和模型的初步构建。它可以作为...

    matlab—regress.zip_matlab_matlab regress_数据集 回归_线性回归

    本压缩包"matlab—regress.zip"提供了MATLAB环境中进行线性回归的实例,以及相关的练习数据集,非常适合初学者学习和实践。 首先,我们要理解线性回归的基本概念。线性回归模型通常表示为Y = aX + b,其中Y是因变量...

    MS_Regress_FEX.zip_MS_Regress_FEX_matlab ms_ms_regress_regime sw

    **MS_Regress_FEX** 是一个专为Matlab设计的软件包,用于处理Markov Regime Switching(马尔科夫状态转换)模型。这个工具箱提供了强大的功能,能够帮助研究者和数据分析师在时间序列分析中应用复杂的经济或金融模型...

    matlab 多元与非线性回归即拟合问题regress、nlinfit.doc

    在MATLAB中,进行多元与非线性回归分析是数据建模的重要部分,这涉及到regress和nlinfit两个函数的使用。这两个函数主要用于拟合数据,帮助我们理解和描述复杂的数据关系。 首先,regress函数是MATLAB中的线性回归...

    MATLAB 回归分析regress,nlinfit,stepwise函数.pdf

    在MATLAB中,回归分析是研究变量间关系的重要工具,主要涉及了三个核心函数:`regress`,`nlinfit`,以及`stepwise`。这些函数在统计学和数据分析中扮演着关键角色,帮助用户理解数据模式,构建预测模型,并识别变量...

    MS_Regress_Sim.zip_GARCH MATLAB_garch_garch 极大似然_马尔科夫 garch_马尔科夫

    2. 定义模型结构:选择合适的GARCH类型(如GARCH(1,1),EGARCH等)并设定马尔科夫状态的数量。 3. 构建状态转换矩阵:定义不同状态之间的转移概率。 4. 极大似然估计:使用MATLAB的优化工具箱求解模型参数,如MATLAB...

    regress-485.rar_The Don

    Ensure that we don t expose the builtins object when calling builtin functions that use or return "this".

    pls_regress.m

    利用matlab对多维自变量与单因变量的数据集寻找其联系的偏最小二乘回归方法,函数输入为自变量矩阵C,同维度列向量F,输出为最终的系数矩阵以及拟合值

    train_regress.py

    bert模型训练,做回归任务,预测两句话的相似度;TensorFlow和keras单机四卡、多GPU训练模型代码,已经上线;

    regress-306591.rar_Windows编程_Java_

    标题中的"regress-306591.rar"可能是指一个修复了特定问题或错误(Regression)的软件版本或补丁,而“Windows编程”和“Java”标签表明这个压缩包的内容与使用Java语言进行Windows平台的软件开发有关。描述中提到的...

    MS_Regress_FEX.zip_foxbz8_markov switching_matlab_mexfex_model f

    2. 状态切换:MSM的关键在于状态间的切换概率,这些概率由一个或多个Markov链决定,且在模型中通常假设是时间不变的。 3. 参数状态依赖:在每个状态,模型的参数可能不同,这使得MSM能灵活地适应数据的非平稳性。 ...

Global site tag (gtag.js) - Google Analytics