2011-12-21 2 views
1

Добавление элемента в ArrayList<String>, который был построен в 2 этапа, приводит к массиву вне синхронизации. Это происходит только в сгенерированном JS-коде, а не в режиме разработки.Ошибка ввода порядка в IE8

// The list where the bug occurs 
ArrayList<String> list = new ArrayList<String>(); 

// Add a first element to the List 
list.add("0"); 

//tmpList with elements that we will add at the end of the original 
//list(at least 32 elements makes the bug occurs) 

ArrayList<String> tmpList = new ArrayList<String>(); 
for(int i=1;i<33;i++) tmpList.add(""+i); 
list.addAll(tmpList); 

// The bug occurs when we add an element X to the position 
// 1 or 2. The bug also occurs when usind addAll method 
list.add(1,"X"); 

Полученный массив ...

0 X 1 2 *4* *3* *4* 5 6 7 8 9 10 11 12 13 14 15 
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 

вместо ожидаемого результата ...

0 X 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 

Это решение, которое работает.

ArrayList<String> finalList = new ArrayList<String>(); 
for(int i=0; i<1;i++) 
    finalList.add(list.get(i)); 
finalList.add("X"); 
for(int i=1; i<list.size();i++) 
    finalList.add(list.get(i)); 
+0

ли это также возникает, если добавить элемент «X» до добавления других 32 элементов? –

+0

Вы уверены, что у вас что-то отсутствует? вы попробовали его в другом браузере? –

+0

нет, это не происходит до добавления другого. и да, мы пробовали в других браузерах. это происходит только на ie7 & ie8. не проверен на ie6. он работает на firefox и chrome и ie9. –

ответ

0

может быть, это Java-ошибка с IE, попробуйте добавить каждый элемент в одиночку, вместо того, чтобы использовать addAll и посмотреть, что происходит на debuggin код:

for(int i=1;i<33;i++) list.add(i+""); 
+1

Это скорее комментарий, чем ответ ... –