我有两个SWT按钮,即button(“ Start”)和button(“ Stop”)。当我按“开始”时,我调用一个方法:
printFiles(inputPath,printer)//扫描“ inputPath”目录中的pdf并将其发送到打印机“ printer”

我希望printFiles(inputPath,printer)始终运行,直到我按下按钮(“ Stop”)为止。所以,那是我的第一个想法。

//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)循环中返回。结果,整个窗口(外壳)停止响应。

您是否知道如何在按钮的按下侦听器内放置一个无限循环?

我的分析师说,我必须使用并发,以某种方式同步这两个按钮。如果是正确的话,您能给一些暗示如何暗示的提示吗?

非常感谢!

最佳答案

您不应该在GUI线程上执行冗长的任务。而是,启动一个新线程来完成工作。在这种简单情况下,您不需要复杂的同步机制,只需替换

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




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

09-09 23:35
查看更多