我有一个独立运行的方法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);
}
}
答案 0 :(得分:0)
答案似乎在于使用TimerTask来为AFTER执行一个任务时间已完全完成,因为它似乎在单线程上。
http://enos.itcollege.ee/~jpoial/docs/tutorial/essential/threads/timer.html