2012-04-13 153 views
1

从这个代码下面执行代码太快..需要减慢,但如何?

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

实际上是调用我的客户,以便得到的回报也pID的从人民TABLE数据获取问题这将是返回到下一行应该被执行

 String pID = pID_Manage.getText(); 

但随后作为下一行作业JTextField是添加某些圣响成具有PID和pName_Sub的组合,但后来当执行时,我发现我的ArrayList不具备pID..so,而不是真正的结果应该是这样的

 DATA:TAKE:PEOPLEs:1:ALBERT (In my arraylist) 

它显示像一个ArrayList这

 DATA:TAKE:PEOPLEs::ALBERT (the id is missing) 

我需要再次重新提交第二次只能拿到ID ...好像代码的执行太快和ID的回归JTextField中的存储是slow..any减慢速度的方法?

+6

这不是代码执行得太快的情况,这是一个竞争条件。对于'a.sendMsgToSlave()'来说,正确的解决方案要么是阻塞,直到从机的PID被计算并存储为止,要么'a.sendMsgToSlave()'返回PID。实际上,最好的解决方案就是将这两者结合在一起。 – 2012-04-13 19:22:40

回答

1

快速而肮脏的解决方案是拨打Thread.Sleep,但更好的解决方案是修改a.sendMsgToSlave()中的代码,只有在设置了id后才返回。这样你就可以确定当执行到达sendMsgToSlave()之后的声明时,你肯定会每次都准备好ID。

0

以下是您sollution:上JTextField的pID_Manage

看跌的ChangeListener,并打电话给你的阵列填充方法,它
,这样当编号收到并分配到JTextField中的阵列将仅被填充。

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

所以基本思路是,听众反应,相应的事件,它立即注销其本身在射击。

+0

嗯我是新来的这个changelistener ..我似乎无法添加我的jtextfield到它...我使用eclipse时,我输入我的pID_Manage.addChange我看到nth与它有关.. – user1217609 2012-04-13 19:44:30

+0

正如我所说,米近似的代码,对此感到抱歉。浏览一下'JTextField'后,我并不确定哪个侦听器可以使用。可能是'VetoableChangeListener',但不要听我说。 – 2012-04-13 19:46:12

-1

我不知道这是否会工作,但事情就像试图阻止散列值和其他安全问题的彩虹表,做这样

for(int i = 0; i < 100; i++) { 
} 

东西可能做的伎俩。但是我再也没有测试过这个,这只是一个建议

+0

彩虹桌如何与固定竞赛条件有关? – 2012-04-13 22:18:32

+0

对不起,我是在考虑通过添加没有意义的东西来减缓它的速度,我已经看到了php脚本这样做,所以尝试生成彩虹表需要花费1000倍的时间,因为它必须执行1000次循环 – Luke 2012-04-13 22:31:54

+0

@Luke但是无论如何,真正的黑客只会在使用代码之前删除浪费时间的部分代码。请阅读http://crackstation.net/hashing-security.htm,了解_correct_处理这类安全问题的方法。 – AJMansfield 2013-04-22 22:07:18