[英]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.