在swt中加载数据时禁用按钮

时间:2014-03-05 07:15:56

标签: java multithreading button swt jface

在我的应用程序中,我有一个提取按钮,可以获取一些内容(大约需要1分钟才能完成)。我想在加载数据时禁用此提取按钮。我已经设置了

fetchButton.setEnable(false);

用户点击按钮后。但有时它会禁用按钮,有时按钮仍然启用(我认为它是由于某些线程而发生的)。

这是我过度简化的代码



    fetchButton.addSelectionListener(FetchData);        

    public SelectionAdapter FetchData= new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent event) {
                fetchButton.setEnable(false);

                Runnable job = new Runnable() {

                    @Override
                    public void run() {
                        doSomeHeavyTask();  
                    }
                }
                BusyIndicator.showWhile(Display.getCurrent(), job);
    };

然后修改后的新代码



    fetchButton.addSelectionListener(FetchData);        

    public SelectionAdapter FetchData= new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent event) {
            fetchButton.setEnable(false);

            cursor = new Cursor(Display.getCurrent(), SWT.CURSOR_WAIT);
            Display.getCurrent().getActiveShell().setCursor(cursor);

            Thread Job = new Thread() {
                public void run() {
                    doTask();
                }
            };
            Job.run();

            cursor = new Cursor(Display.getCurrent(), SWT.CURSOR_ARROW);
            Display.getCurrent().getActiveShell().setCursor(cursor);

0 个答案:

没有答案