簡體   English   中英

執行代碼太快..需要減慢速度,但是如何?

[英]executing code too fast..need to slow down but how?

從下面的代碼

  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作為回報,該pID將返回到JTEXTFIELD,在其中執行下一行

     String pID = pID_Manage.getText();  

但是接下來的工作是將某些字符串添加到具有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的存儲速度很慢..有什么方法可以減慢速度?

一種快速而又骯臟的解決方案是調用Thread.Sleep ,但是更好的解決方案是修改a.sendMsgToSlave()的代碼以僅在設置ID之后返回。 這樣,您可以確定,當執行到sendMsgToSlave()之后的語句時,您肯定會每次都准備好ID。

您的sendMsgToSlave啟動了一個異步事件鏈,該事件鏈導致文本字段在以后的某個時間更新。 您應該修改體系結構,以使依賴於所設置的ID字段的代碼針對實際發生的事件而運行。 正如其他人提到的,您可以使sendMsgToSlave同步,但是從其名稱來看,我認為這不是一個好主意。 您可以做的是將更改偵聽器附加到ID字段,該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);
}};

因此,基本思想是偵聽器對適當的事件做出反應,並在觸發后立即注銷自己。

以下是您的解決方案:
將changelistener放在jtextfield pID_Manage上
並在其中調用數組填充方法
因此只有在收到ID並將其分配給jtextfield時,才會填充該數組。

我不確定這是否行得通,但是在嘗試防止哈希表中的哈希表和其他安全性問題時,例如

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

可能會解決問題。 但是我再也沒有測試過,這只是一個建議

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM