来自以下代码
if(!validate_containsNum && !validate_isNumber && !validate_isBlankField){
a.sendMsgToSlave("DATA:TAKE:PEOPLEs:"+pName_sub);
appendToGlobalDataLog("SEND : DATA:TAKE:PEOPLEs:"+pID+":"+p_sub);
String pID = pID_Manage.getText();
a.addtoArrayList("DATA:TAKE:PEOPLEs:"+pID+":"+pName_sub);
at.sendToServer("DATA:TAKE:PEOPLEs:"+pID+":"+pName_sub);
}
从上面的代码我有一个问题,这行
a.sendMsgToSlave("DATA:TAKE:PEOPLEs:"+pName_sub);
实际上是调用我的客户端从人员TABLE中获取数据,以获得返回的pID,这将返回到应该执行下一行的JTEXTFIELD
String pID = pID_Manage.getText();
然后至于下一行作业是将某些String添加到具有pID和pName_Sub组合的arraylist中但是当执行它时我发现我的arraylist没有pID..so而不是真实的结果应该是这样的
DATA:TAKE:PEOPLEs:1:ALBERT (In my arraylist)
它显示如下
DATA:TAKE:PEOPLEs::ALBERT (the id is missing)
我需要再次重新提交第二次才能获得ID ...似乎代码的执行速度太快而且存储ID以回到JTEXTFIELD很慢..任何减缓速度的方法?
答案 0 :(得分:1)
快速而肮脏的解决方案是调用Thread.Sleep
,但更好的解决方案是修改a.sendMsgToSlave()
中的代码,只有在设置了id后才返回。这样你就可以确定当执行到sendMsgToSlave()
之后的语句时,你肯定每次都准备好ID。
答案 1 :(得分:1)
您的sendMsgToSlave
启动一个异步事件链,导致文本字段稍后更新。您应该修改您的体系结构,以便依赖于所设置的ID字段的代码运行以响应实际发生的事件。正如其他人所提到的,你可以让sendMsgToSlave
同步,但从它的名字来看,我认为这不是一个好主意。您可以做的是将更改侦听器附加到将执行剩余任务的ID字段。我会近似,因为我不知道你需要的确切听众:
pID_Manager.addChangeListener(new ChangeListener() {
public void textChanged(ChangeEvent e) {
pID_manager.removeChangeListener(this);
String pID = pID_Manage.getText();
a.addtoArrayList("DATA:TAKE:PEOPLEs:"+pID+":"+pName_sub);
at.sendToServer("DATA:TAKE:PEOPLEs:"+pID+":"+pName_sub);
}};
所以基本的想法是听众对适当的事件作出反应,并在发射时立即取消注册。
答案 2 :(得分:0)
以下是您的解决方案:
将changelistener放在jtextfield pID_Manage上
并在其中调用您的数组填充方法
这样只有在收到id并将其分配给jtextfield时才会填充数组。
答案 3 :(得分:-1)
我不确定这是否有效,但是有些事情,比如试图在哈希和其他安全问题中防止彩虹表,做类似的事情
for(int i = 0; i < 100; i++) {
}
可能会成功。但我再也没有测试过这个,这只是一个建议