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

时间:2016-03-14 08:37:40

标签: java multithreading user-interface swt

我正在研究基于RCP的应用程序,我需要用结果行填充屏幕。现在,只要我有少量数据,例如300行,我的应用程序就可以正常运行。在300行之后如果我点击在“显示更多”按钮上显示更多结果,UI变得无法响应。我确实尝试了Display().getCurrent().asyncExec()Display().getCurrent().syncExec()。我没有得到预期的结果.Below是代码段。

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();
                    }
                }
            });
        }
    }

1 个答案:

答案 0 :(得分:0)

您在UI线程中运行的任何代码都会使UI无响应,直到完成为止。使用来自UI线程代码的syncExecasyncExec并没有帮助。

您需要将长时间运行的代码放在Eclipse Job或后台线程中。然后,您必须使用syncExecasyncExec仅用于实际访问UI控件的代码(尝试直接访问控件将失败)。