2013-05-08 116 views
0

在我的應用程序應該從列表中的線程上運行時刪除一個字符串,但我得到異常 一樣,刪除字符串

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: item gh not found in list 
    at java.awt.List.remove(Unknown Source) 
    at org.sample.ChatClient$updateClient$1.run(ChatClient.java:200) 
    at java.awt.event.InvocationEvent.dispatch(Unknown Source) 
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source) 
    at java.awt.EventQueue.access$000(Unknown Source) 
    at java.awt.EventQueue$3.run(Unknown Source) 
    at java.awt.EventQueue$3.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
    at java.awt.EventQueue.dispatchEvent(Unknown Source) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.run(Unknown Source) 

代碼:

final Map<String, String> liHashMap=list; 
SwingUtilities.invokeLater(new Runnable() { 
    @Override 
    public void run() { 
     for (Entry<String, String> entry : liHashMap.entrySet()) { 
      String client_Name=entry.getKey(); 
      if(!checkList.containsKey(client_Name)) { 
       lst.add(client_Name + "\n"); 
       checkList.put(client_Name, ipAddress); 
      } 
     } 
     for (Entry<String, String> entry : checkList.entrySet()) { 
      String client_Name=entry.getKey(); 
      if(!liHashMap.containsKey(client_Name)){ 
       lst.remove(client_Name);//Remove string from list 
       checkList.remove(client_Name); 
     } 
    } 
+2

'java.lang.IllegalArgumentException:在列表中找不到gh項目如果該項目存在,是否檢入了代碼?我認爲這個錯誤很明顯。此外,您應該需要上傳「串」到您的列表(代碼)的位置和方式。 – DaGLiMiOuX 2013-05-08 14:03:20

回答

1

問題在這裏。更改此:

if(!liHashMap.containsKey(client_Name)){ 
       lst.remove(client_Name);//Remove string from list 
       checkList.remove(client_Name); 
     } 

要這樣:

if(liHashMap.containsKey(client_Name)){ 
       lst.remove(client_Name);//Remove string from list 
       checkList.remove(client_Name); 
     } 

我假設你的散列映射是從你的列表中刪除項目的後備存儲。對?因此,如果密鑰位於哈希映射中,並且位於列表中,則只應刪除該密鑰。

如果這不是它的工作方式,那麼您需要維護一個應該刪除的項目列表,並且您已經驗證它實際上在列表中,然後刪除它們。就像這樣:

if(toBeRemovedMap.containsKey(client_Name)){ 
       lst.remove(client_Name);//Remove string from list 
       checkList.remove(client_Name); 
     } 
0

IllegalArgumentException如果傳遞的值不會在java.awt.List存在將被拋出。

如果使用java.util.List,那麼如果傳遞值存在,則返回true,否則返回false