Я реализовал поиск множества элементов (сотен) в JList с использованием Lucene - когда кто-то вводит в поле поиска, он выполняет поиск и отображает результаты в JList. Он делает это, добавляя и удаляя элементы из базовой модели JList, когда каждый символ вводится, но этот подход блокирует пользовательский интерфейс (поскольку добавление чего-то в ListModel должно выполняться на EDT.) Поиск выполняется очень быстро, но это добавление и удаление элементов, требующих времени.Добавление большого количества элементов в ListModel без блокировки пользовательского интерфейса
Как я могу подойти к проблеме, чтобы не блокировать EDT во время модификации модели?
Длина отставания не является огромной - она определенно находится в состоянии, когда ее можно использовать в данный момент, просто не так, как snappy как хотелось бы (из-за лучшего слова.) Я ожидая, что люди на менее мощных машинах, чем мои, смогут запустить программное обеспечение, хотя отсюда и интерес к сортировке проблемы.
Другие детали:
Я профилированный приложение, задержка, безусловно, вызвано добавлением/удалением большого количества элементов. Типичным шагом может быть то, что любое количество элементов будет добавлено или удалено, от нескольких до сотен. Например, если я ищу букву «x» в текстовом поле, большинство элементов будут удалены, так как некоторые из них содержат эту букву. Если я удалю письмо, все предметы будут добавлены снова. Если я ищу более общий термин, например, «например», то только несколько элементов могут быть удалены, так как основная часть из них содержит этот термин.
Я не имею прямого отношения к строкам, но они относительно простые объекты, состоящие из нескольких строк (Песня, которая будет точно составлена из таких вещей, как название, автор, лирика и т. Д.), повторно всех кэшированных с использованием SoftReferences, где это возможно (так предполагают, ни один из этих объектов не создаются или уничтожаются, они не должны быть для обычного пользователя.)
Сколько предметов вы добавляете или удаляете из JList за один раз на типичном шаге? Какие типы объектов добавляются в JList? Строки? Что-то более сложное? Есть ли успех при создании объекта? И вы профилировали это? –
@HovercraftFullOfEels См. Обновленный ответ. – berry120
Спасибо за разъяснение. В ответ я написал несколько слабых предложений. –