0

我有一个独立工作的方法 myFuncs.requestData() 。它订阅以侦听数据并在侦听器收到所有数据时设置 ReadyTxt="TRUE" - 这来自多个回调。

但是,当我尝试在附加到按钮的 actionPerformed 方法中检查 DataReady 时 - 它未设置,因为似乎 myFuncs.requestData() 仅在我们退出 actionPerformed 之后才被处理/运行。

“独立”是指如果我没有在 ##HERE## 放置任何函数,那么 requestData() 将在 actionPerformed 完成后工作。

如何确保它运行并等待它在 ##HERE## 点完成?

@Override
public void actionPerformed(ActionEvent arg0) {
    // TODO Auto-generated method stub
    writePaneln("BUTTON PRESSED "+myFuncs.ReadyTxt);

    myFuncs.requestData();

    try {
        Thread.currentThread().sleep(5000);
    } catch (InterruptedException e) {
    }
    writePaneln("REQUESTED "+myFuncs.ReadyTxt);

            ##HERE##
    }

线程版本:

@Override
public void actionPerformed(ActionEvent arg0) {
    // TODO Auto-generated method stub
    writePaneln("BUTTON PRESSED "+myFuncs.ReadyTxt);

            Thread thread = new Thread() {
                    public void run(){
                 myFuncs.requestData();
                    }
    };

    thread.start();

    try {
        Thread.currentThread().sleep(5000);
    } catch (InterruptedException e) {
    }
    writePaneln("REQUESTED "+myFuncs.ReadyTxt);

            ##HERE##
    }

简化的请求数据():

public void requestData() {

            DataReady="FALSE"
    this.dataSubscription.setListener(this);


}


@Override
public void dataUpdated(List<long> updatedData) {


    if (updatedData.size() <= 1 ){
        this.dataSubscription.destroy();

        writePaneln("In dataUpdated DataReady num: "+Dates.size());
        DataReady="TRUE";
        return;
    }

    for (long l: updatedData){
            writePaneln(l);
        Dates.add(l);
    }


}
4

1 回答 1

0

答案似乎在于使用 TimerTask 在 actionPerformed 完全完成后为任务计时,因为它似乎在单线程上。

http://enos.itcollege.ee/~jpoial/docs/tutorial/essential/threads/timer.html

于 2013-10-05T08:26:45.783 回答