我正在开发一个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();
答案 0 :(得分:4)
您需要查看SwingWorker。
答案 1 :(得分:4)
我相信worker.run()可能会造成一些麻烦。如果我没有误解你的代码,你应该实际调用worker.execute()。
此外,尽可能将Done方法中的计算尽可能多地移动到doInBackground。 Done方法在Event Dispatch Thread上执行,它会冻结GUI,特别是在运行长计算时会显而易见。
答案 2 :(得分:2)
您可以在与主GUI线程不同的线程中执行计算。这里是an article你可以看看哪些内容还涵盖了在swing应用程序中进行多线程处理时应该注意的不同内容。