方法不在java侦听器actionPerformed中运行

时间:2013-10-04 14:37:25

标签: java awt listener actionlistener

我有一个独立运行的方法myFuncs.requestData()。它用于侦听数据,并在侦听器收到所有数据时设置ReadyTxt =“TRUE” - 这是多次回调。

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

“standalone”我的意思是如果我在## 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##
    }

简化的requestData():

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);
    }


}

1 个答案:

答案 0 :(得分:0)

答案似乎在于使用TimerTask来为AFTER执行一个任务时间已完全完成,因为它似乎在单线程上。

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