Prefuse зависает JFrame

Мы вызываем веб-сервисы для сбора информации для графа с примерно 1500 узлами. Мы отображаем график в Prefuse, в то время как он постоянно добавляет узлы и ребра. В большинстве случаев это работает отлично, но время от времени все приложение зависает, и единственный способ восстановить его — закрыть приложение и начать заново. Когда это происходит, исключения не распечатываются. В других случаях я довольно часто вижу «IllegalArgumentException: Invalid row index: -1», но это, похоже, не связано с зависанием приложения.

Я видел похожие вопросы о зависании в апплетах, но наше приложение работает в JFrame, а не в апплете. На всякий случай, если это была наша проблема, мы попытались вызвать ActivityManager.stopThread() (не смогли найти метод kill) в разных местах нашего кода. Это, кажется, не имеет большой разницы.

Существует ли безопасный способ для prefuse отображать график при редактировании графика?


person Jay Askren    schedule 16.01.2012    source источник
comment
Вероятно, вам также нужно показать код.   -  person Viruzzo    schedule 16.01.2012
comment
Пробовали ли вы звонить kill(), как рекомендовано в этой ветке?   -  person Andrew Thompson    schedule 16.01.2012
comment
Метода убийства больше нет. Я только предполагаю, что он был заменен на stopThread().   -  person Jay Askren    schedule 16.01.2012
comment
@Viruzzo Хороший вопрос. Я посмотрю, смогу ли я создать простой пример, демонстрирующий такое же поведение.   -  person Jay Askren    schedule 16.01.2012
comment
@AndrewThompson, все же было бы лучше выяснить, почему он зависает, и сделать так, чтобы он вышел чисто; останавливать потоки от другого не очень чисто.   -  person Viruzzo    schedule 16.01.2012
comment
Для stopThread() в подробном руководстве указано Останавливает поток менеджера активности. Все запланированные действия отменяются, а затем поток уведомляется о прекращении выполнения. Звучит как хороший способ остановить действие, и без упоминания Thread.stop(). ;) Что случилось, когда вы устали звонить?   -  person Andrew Thompson    schedule 16.01.2012
comment
@JayAskren: вы можете попробовать найти нарушение EDT, используя один из подходов, приведенных здесь.   -  person trashgod    schedule 30.05.2015
comment
Спасибо, трэшбог. Это хороший момент. С тех пор, как я задал этот вопрос, я перешел к другим вещам, но проверка нарушений EDT была бы полезна.   -  person Jay Askren    schedule 26.08.2015


Ответы (1)


Есть ли потокобезопасный способ отображения графика при редактировании графика?

Все обновления графического интерфейса должны выполняться в EDT. Используйте SwingWorker.

Дополнительную информацию см. в разделе Параллелизм в Swing.

person camickr    schedule 16.01.2012
comment
Конечно, все обновления графического интерфейса должны быть в EDT. Однако это совсем не помогает при отладке предварительного предохранителя. - person Jay Askren; 16.01.2012