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