2016-09-04 2 views
0

У меня есть небольшое приложение, которое быстро находит «результаты» (вид результата здесь не важен, но иногда более 10 в секунду), и я хочу отобразить их пользователю в виде таблицы формы или чего-то подобного. Я использую swing JTable (внутри JFrame) для этого, вставьте новый результат в новую строку и затем выполните метод, который будет прокручиваться далеко вниз.Swing update lags

Object[] data = new Object[6]; 
    //fill data-array 
    ((DefaultTableModel) resultTable.getModel()).addRow(data); 
    resultTable.scrollRectToVisible(resultTable.getCellRect(resultTable.getRowCount(), 0, false)); 

Это делает работу так или иначе, но свинг, кажется, немного лага при обновлении точки зрения, так что большая части времени (из-за огромное количество перерисовки) строки таблицы, кажется глюк вокруг окна ,

Есть ли у вас какие-либо идеи о том, как предотвратить это? Как синхронизация с некоторыми встроенными замками краски/с использованием другого метода для сравнения результатов?

ответ

2

Невозможно сказать, что не так, без соответствующего кода, но я предполагаю, что вы выполняете обработку, которая требует времени в потоке событий Swing (пожалуйста, покажите больше, поэтому нам не нужно гадать). Если это так, то решение заключается в использовании SwingWorker, позволяющем выполнять обработку в фоновом потоке при одновременном обновлении состояния Swing в потоке событий Swing или EDT. Например, вы можете получить свои данные в цикле внутри метода SwingWorker doInBackground(), а затем с помощью publish/process, чтобы нажимать каждую строку данных на модель JTable.

Более подробно об этом смотрите: Lesson: Concurrency in Swing

Если вам нужна более конкретную помощь, то, пожалуйста, рассмотреть вопрос о создании и разместить свои Minimal, Complete, and Verifiable Example Program.

+0

Я думаю, что на самом деле это может быть проблема. Я посмотрю на это, спасибо за быстрый ответ. –