Java 用户界面在特定数量的结果后变得无响应
我正在开发基于RCP的应用程序,在这个应用程序中,我需要在屏幕上填充结果行。现在,只要我有少量数据(例如300行),我的应用程序就可以正常工作。300行之后,如果我单击“显示更多”按钮以显示更多结果,UI将变得无响应。我尝试了Java 用户界面在特定数量的结果后变得无响应,java,multithreading,user-interface,swt,Java,Multithreading,User Interface,Swt,我正在开发基于RCP的应用程序,在这个应用程序中,我需要在屏幕上填充结果行。现在,只要我有少量数据(例如300行),我的应用程序就可以正常工作。300行之后,如果我单击“显示更多”按钮以显示更多结果,UI将变得无响应。我尝试了display().getCurrent().asynceec()和Display().getCurrent().syncExec()。我没有得到预期的结果。下面是代码片段 private void setResults(final SearchResultData res
display().getCurrent().asynceec()
和Display().getCurrent().syncExec()
。我没有得到预期的结果。下面是代码片段
private void setResults(final SearchResultData results) {
int totalHits = 0;
this.results = results;
setMoreResultsBtnVisible(false);
setResultHeadingText(offset, totalHits);
if (results != null && !results.getResults().isEmpty()) {
totalHits = results.getTotalHits();
setResultHeadingText(offset, totalHits);
final boolean showMore = offset < totalHits;
Display.getCurrent().syncExec(new Runnable() {
@Override
public void run() {
if (scrolledResultList != null && !scrolledResultList.isDisposed()) {
populateList(results.getResults());
setMoreResultsBtnVisible(showMore);
scrolledResultList.layout();
resizeScrollableComposite();
}
}
});
}
}
private void setResults(最终搜索结果数据结果){
int totalHits=0;
这个结果=结果;
SetMoreResultsBtVisible(假);
SetResultTheAdingText(偏移量、总点击次数);
if(results!=null&&!results.getResults().isEmpty()){
totalHits=results.getTotalHits();
SetResultTheAdingText(偏移量、总点击次数);
最终布尔值showMore=偏移量<总点击数;
Display.getCurrent().syncExec(新的Runnable()){
@凌驾
公开募捐{
if(scrolledResultList!=null&!scrolledResultList.isDisposed()){
populateList(results.getResults());
SetMoreResultsBtVisible(显示更多);
scrolledResultList.layout();
resizeScrollableComposite();
}
}
});
}
}
在UI线程中运行的任何代码都会使UI在完成之前没有响应。从UI线程代码中使用syncExec
或asynceec
没有帮助
您需要将长时间运行的代码放在Eclipse
作业
或后台线程中。然后必须仅对实际访问UI控件的代码使用syncExec
或asyncExec
(尝试直接访问控件将失败).是setResults
在UI线程中运行,还是后台线程或作业?它在UI线程中运行。