Почему мой графический интерфейс в Java зависает, когда я начинаю вычисления в Java - PullRequest
1 голос
/ 14 января 2012

Я занимаюсь разработкой Java-приложения

но мое приложение зависает при запуске процесса моего приложения

поэтому я могу обновить свой GUI во время процесса

Ребята, вы знаете, как это исправить?

Буду благодарен за ваш ответ, спасибо

Ребята, я уже пробовал это, но он все еще зависает GUI

вот мой код

final String key = keywords;
        final int dept = dep;
        final double rele = relevance;

        SwingWorker worker = new SwingWorker<Map, Void>() {
            @Override
            public Map doInBackground() {
                final Map resultMap = focusedCrawlingMain.Search(key, dept, rele);  

                return resultMap;
            }

            public void Done(Map dataMap) {
                final List resultList = (List) dataMap.get("relevantList");
                List resultListValue = (List) dataMap.get("relevantListScore");
                int size = resultList.size();

                newData = new String[size][3];
                for(int i = 0; i < size; i++){
                    newData[i][0] = String.valueOf(i+1);
                    newData[i][1] = String.valueOf(resultList.get(i));
                    newData[i][2] = String.valueOf(resultListValue.get(i));
                    model.addRow((new Object[]{newData[i][0],newData[i][1],newData[i][2]}));
                }
            }
        };
        worker.run();

Ответы [ 3 ]

4 голосов
/ 14 января 2012

Вам нужно взглянуть на SwingWorker .

4 голосов
/ 27 ноября 2012

Я полагаю, что worker.run () может вызвать некоторые проблемы.Если я не правильно понял ваш код, вам следует вызвать worker.execute ().

Также переместите как можно больше вычислений в методе Done в doInBackground.Метод Done выполняется в потоке диспетчеризации событий, который останавливает графический интерфейс, что особенно заметно при выполнении длинных вычислений.

2 голосов
/ 14 января 2012

Вы можете выполнить расчет в отдельном потоке, чем основной поток GUI.Вот статья , на которую вы также можете взглянуть, в которой также рассматриваются различные вещи, которые вы должны знать при выполнении многопоточности в Swing-приложении.

...