我有一个独立工作的方法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