|
|
|
GUI и многопоточность
|
|||
|---|---|---|---|
|
#18+
Привет всем!! Ситуация следующая: Есть программа создающая сервер сокета и для каждого нового подключенного клиента создает новый поток. В этом потоке производится работа с БД Оракл (чтение, запись и обращение к процедурам) + некоторые вычисления и результат выводится в создаваемый этим потоком фрейм. Проблема состоит в том, что при одновременном обслуживании двух (нескольких) клиентов происходит следующее: пока обслуживание первого клиента не будет завершено, фрейм следующего клиента не будет прорисован, т.е. он будет висеть на экране, его можно перемещать и т.д., но он равномерно серый, без всего наполнения. Складывается впечатление что потоки используются только для обработки данных, а GUI зависает до полного завершения обработки... Интересная ситуация получается - если на обслуживание первого клиента требуется в несколько раз больше времени, чем на обслуживание второго (к примеру создание отчета за длительный период времени для первого и вывод маленькой справочной информации для второго), а подключаются они практически одновременно, т.е. и обслуживаться начинают тоже почти одновременно, а данные по запросу второго клиента появятся в его фрейме ТОЛЬКО ПОСЛЕ того, как появится отчет по запросу первого клиента. Сам факт появление фрейма для второго клиента говорит о том что данные для него уже получены т.к. в программе сначала данные, а только потом вывод фрейма. Но он будет просто стоять серым, пока работа с запросом первого клиента полностью не завершится... Подскажите с чем это может быть связано. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2007, 12:31:24 |
|
||
|
GUI и многопоточность
|
|||
|---|---|---|---|
|
#18+
GUI в Java однопоточный (многопоточных реализаций я не знаю). Долгоиграющие операции в Event Dispatch Thread будут приводить к тому что вы описали. SwingWorker ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2007, 12:38:34 |
|
||
|
GUI и многопоточность
|
|||
|---|---|---|---|
|
#18+
при работе с потоками в свинге ключевые слова: SwingUtilities.invokeLater(), класс SwingWorker (искать в гугл) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2007, 12:40:32 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=34267720&tid=2146898]: |
0ms |
get settings: |
16ms |
get forum list: |
20ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
57ms |
get topic data: |
19ms |
get forum data: |
4ms |
get page messages: |
83ms |
get tp. blocked users: |
1ms |
| others: | 288ms |
| total: | 500ms |

| 0 / 0 |
