Java 用户界面在特定数量的结果后变得无响应

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

我正在开发基于RCP的应用程序,在这个应用程序中,我需要在屏幕上填充结果行。现在,只要我有少量数据(例如300行),我的应用程序就可以正常工作。300行之后,如果我单击“显示更多”按钮以显示更多结果,UI将变得无响应。我尝试了
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线程中运行。