2010-02-19 4 views
4

Я написал фреймворк, который выполняет вычисления, которые занимают много времени (около 15 минут). Теперь я хочу написать интерфейс в Swing, который будет собирать данные из базы данных и выполнять эти вычисления.Java Swing long Выполнение потока

Мне просто интересно, как это сделать? Если я выполняю интенсивные вычисления в потоке событий, весь интерфейс зависает, пока код не будет закончен.

Я начал думать, что создам объект, который может обрабатывать всю задачу вычисления, но что мне делать с информацией о состоянии и статусе во время выполнения. У меня также есть несколько действий, которые могут быть выполнены, например. разные расчеты, требующие разных данных. Нужно ли писать объект для каждого действия? Если я отделяю представление и расчет, я должен обмениваться данными - для чего лучше всего?

Спасибо и наилучшими пожеланиями

Marco

ответ

2

Прочитайте раздел из свинг учебника по Concurrency для примера на использовании SwingWorker.

3

Взгляните на SwingWorker (для Java 6, но есть версия библиотеки, которую вы можете получить для Java 5). С SwingWorker вы запускаете свой интенсивный процесс в методе doInBackground(), а метод done() вызывается в очереди событий, когда он заканчивается, что позволяет вам обновлять графический интерфейс. Он также предоставляет средства для уведомления GUI о ходе выполнения задачи, если это возможно.

+0

Уход за разъяснением проблемы, имеющейся у вас, с помощью downvoter? – ColinD

+0

Спасибо, SwingWorker звучит действительно интересно –

+0

+1 чтобы противостоять случайному убийству. – reccles