2012-04-13 152 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