方法未在 java 侦听器操作中运行已执行



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

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

通过"独立",我的意思是如果我在##HERE##上不放置任何函数,那么requestData()在actionPerform完成后工作。

如何确保它运行并等待它在 ##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);
    }

}

答案似乎在于使用 TimerTask 为 AFTER actioPerforming 的任务计时,因为它似乎在单线程上。

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

最新更新