В ответ на ответ @ vince я думаю, что поучительно посмотреть на то, что Java 1.4.2 javadoc для метода говорит:
protected void validateTree()
Рекурсивно спускается дерево контейнеров и пересчитывает макет для любых поддеревьев, помеченных как нужные (те, которые помечены как недействительные). Синхронизация должна обеспечиваться методом, вызывающим этот: validate
.
(выделение добавлено).
То, как я это читаю, говорит о том, что метод предназначен для вызова validate()
, который (предположительно) будет удерживать блокировку дерева.
Обратите внимание, что текст в Java 6 и Java 7 идентичен. Спецификация не изменилась ...
Теперь, очевидно, существует код приложения, который вызывает validateTree()
напрямую ... без получения блокировки дерева. Предположительно, это приводит к невоспроизводимым проблемам (Heisenbugs), когда конечный пользователь нажимает слишком быстро или что-то в этом роде. Предположительно, изменение в Java 7 предназначено для того, чтобы довести до сведения разработчиков это неправильное / ошибочное использование validateTree()
.
ОК, так что это кратковременная боль. Но в долгосрочной перспективе каждый выигрывает (кроме юристов :-)):
Oracle не получает отчетов об ошибках из-за странного невоспроизводимого поведения, которое действительно является проблемой для программиста приложения.
Разработчики не получают отчеты об ошибках от клиентов за странное невоспроизводимое поведение.
Конечные пользователи получают приложения, которые работают лучше.