2012-05-16 2 views
0

У меня есть графический интерфейс и событие click, я вызываю запросы базы данных для создания нескольких диаграмм. Я не вижу никакой диаграммы, пока все диаграммы не будут завершены, значит, есть некоторая проблема с компонентами графического интерфейса, которые переходят к следующему графику, прежде чем первый график получит complered и покажет его содержимое. Какова возможная причина и как избежать такой проблемы?Java Swing - UI Block

+1

Можете ли вы показать код? – Jonas

ответ

3

Нет проблем с компонентами. Существует проблема с вашим дизайном. Вы выполняете длительные запросы и обновления диаграмм в одном методе, запускаемом в потоке отправки событий. Таким образом, EDT полностью заблокирован и не может перерисовать что-либо до тех пор, пока все запросы не будут выполнены и все диаграммы не будут сгенерированы.

Использовать фоновый поток для выполнения запросов и генерировать диаграмму в EDT каждый раз, когда один запрос завершен. Класс SwingWorker помогает в этом. Прочитайте its API doc и the tutorial о параллелизме в Swing.

+1

Спасибо за комментарий. У меня была такая же вырубка. Ниже вы найдете то, что я делаю btnGenerateGraph.addActionListener (новый ActionListener() {public void actionPerformed (ActionEvent arg0) {// Создаем графики для MYSQL mysqlGrpahGenerator.generateMYSQLGraph(); luceneGraphGenerator.generateLuceneGraph();}); Где вы хотите, чтобы я изменил код? – Jone

+1

Итак, вы уже прочитали javadoc и учебник, к которому я привязался? Если нет, то прочитайте их. Там все объяснено. Если вы уже прочитали их, перечитайте их, поскольку вы, кажется, не поняли, что они объяснили. –

+0

Ну, я его краснею, и я знаю, в чем проблема. Теперь я хочу внести изменения в свой код, но я не понимаю, где я должен обновлять код. На самом деле метод generateMYSQLGraph(); генерировать 8-10 графов, и это похоже на то, что я должен использовать run 8-10 раз :( – Jone