1

我正在开发一个java应用程序

但是当我开始我的申请过程时我的申请冻结

因此我可以在此过程中更新我的 GUI

你们知道如何解决这个问题吗?

我会很感激你的回复 thx

伙计们,我已经尝试过了,但它仍然冻结了 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();
4

3 回答 3

4

我相信 worker.run() 可能会造成一些麻烦。如果我没有误解您的代码,您实际上应该调用 worker.execute()。

此外,尽可能多地将 Done 方法中的计算转移到 doInBackground。Done 方法在 Event Dispatch Thread 上执行,这会冻结 GUI,在运行长时间计算时尤其明显。

于 2012-11-27T11:16:47.507 回答
4

您需要查看SwingWorker

于 2012-01-14T10:39:35.410 回答
2

您可以在与主 GUI 线程不同的线程中执行计算。这是一篇您可以查看的文章,其中还介绍了在 Swing 应用程序中执行多线程时应注意的不同事项。

于 2012-01-14T10:38:41.113 回答