如何同步两个swt按钮的事件?

时间:2013-04-28 12:26:16

标签: java multithreading concurrency swt

我有两个SWT按钮,按钮(“开始”)&按钮( “停止”)。当我按下“开始”时,我调用一个方法:     printFiles(inputPath,printer)//扫描pdfs的“inputPath”目录并将它们发送到打印机“printer”

我希望printFiles(inputPath,printer)始终运行,直到我按下按钮(“停止”)。所以,这是我第一次想到如何做到这一点。

//button("Start")
btnStart.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent arg0) {
    keepPrinting=true;
    while(keepPrinting){
        printFiles(inputPath, printer);
    }
}
});

//button("Stop")
btnStop.addSelectionListener(new SelectionAdapter() {
        @Override
        public void widgetSelected(SelectionEvent arg0) {
            keepPrinting=false;
        }
});

但是,有一个明显的问题。当我按下按钮(“开始”)时,它永远不会从while(true)循环返回。结果,整个窗口(shell)停止响应。

你知道如何在按钮的按下Listener中设置无限循环吗?

我的箴言说我必须使用并发,以某种方式同步这两个按钮。如果这是正确的,你能给出一些提示如何实现吗?

非常感谢!

1 个答案:

答案 0 :(得分:1)

您不应该在GUI线程上执行冗长的任务。相反,开始一个新线程来完成工作。在这个简单的例子中,您不需要复杂的同步机制,只需替换

while(keepPrinting){
    printFiles(inputPath, printer);
}

new Thread() {
    @Override
    public void run() {
        while (keepPrinting) {
            printFiles(inputPath, printer);
        }
    }               
}.start();