Server String r2环境中的Java StringIndexOutOfBounds异常

时间:2012-10-16 05:37:55

标签: java windows string 32bit-64bit

这是使用jre 1.6运行时环境并在64位服务器Server 2008 R2中运行的非常简单的代码块:     ....

        cntr = 0;
       while (cntr < localheaders.size()) {
                    String tempText = textstring.toUpperCase();
        int pos = 0;
        int lastindx = 0;
        int lendPos;
        int tendPos = 0;
        while ((pos > -1) && (tempText.length() > 0)) {
            int headerLengthbeforeUpper = localheaders.get(cntr).header.length();
            String aHeader = localheaders.get(cntr).header.toUpperCase(); 
            int headerLengthafterUpper = aHeader.length();                                                              
            pos = tempText.indexOf(aHeader);  
            // 10_21_2010
            if (pos > 0) { // ef 07-10-2011
                char c;
                try {
                    c = tempText.charAt(pos - 1);
                    if (Character.isLetterOrDigit(c))
                        pos = -1;
                } catch (Exception e) {
                    System.out.println("Value of pos->" + pos);
                    System.out.println("Length of the string->"
                            + tempText.length());
                                            System.out.println("header length before->"+headerLengthbeforeUpper);
                    System.out.println("header length after->"+headerLengthafterUpper);
                    e.printStackTrace();
                }

            }
........

我发现的是声明pos = tempText.toUpperCase().indexOf(aHeader);(大约10行) 正在间歇性地设置字符串tempText中的值大于字符串的长度。这导致java.lang.StringIndexOutOfBoundsException。索引始终在字符串实际长度的100以内。例如,在我今晚运行的测试中,pos变量被设置为24432,长度为24404的字符串。标题长度在大写之前和之后相同,以解决下面的评论之一。请注意,如果我连续两次在同一文件上重新运行代码,则第二次不会发生错误。

其他一些信息:

  1. 我不相信它是一个线程问题,因为只使用了一个线程。
  2. 代码在32位XP环境中运行良好。
  3. pos和tempText都是本地定义的变量。
  4. 当我输入java -version时,我看到以下内容:
  5.   

    Java版“1.6.0_20”   Jav(TM)SE运行时环境(版本1.6.0_20-b02)   Java HotSpot(TM)64位服务器VM(内置16.3-b01,混合模式)

    测试环境在VMware Workstation中运行。

    我认为这是一个环境问题,给出了错误的奇怪性以及它只出现在我的64位测试环境中的事实。我试图找出问题的根源。有没有人,过去有过这种错误?是否有人知道与此特定java版本相关的错误可能会导致此类错误?

    关于如何解决此问题的任何想法?

    谢谢,

    埃利奥特

1 个答案:

答案 0 :(得分:2)

看起来这个错误可能与您的问题有关:

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6942326