1

爲什麼我的應用程序拋出java.lang.ArrayIndexOutOfBoundsException:-1的Future.get()多線程

java.lang.ArrayIndexOutOfBoundsException:-1

當調用的Future.get

( )關於java.utils.concurrent.Future ??

List<Future> tableLoadings = new LinkedList<>(); 
    ExecutorService executor = Executors.newFixedThreadPool(8); 
    try{ 
     for(Entry<Integer, String> entry: farmIds.entrySet()) 
     { 
      int id = entry.getKey(); 
      String username = entry.getValue(); 

      psLog.println("START ELABORAZIONE FARMACIA ID : "+ id+" TPH_USERNAME : "+username);  
      /*SdajSdaj*/ 
      tableLoadings.add(executor.submit(new StatusMultiThreading(id, username, psLog, connSTORY, connCF, mongoDatabase))); 
     } 
     for (Future<Void> future : tableLoadings) {   
       try{ 
        future.get();   
       }catch(Exception e){ 
        psLog.println("[EE] ERORE ELABORAZIONE THREAD FARMACIA [EE] "+e.getMessage()); 
       } 
     } 
    }finally{ 
     executor.shutdown(); 
     psLog.println("END CONSOLIDA STATUS FARMACIE"); 
    }   

這是日誌..

START ELABORAZIONE FARMACIA ID : 62 TPH_USERNAME : A0102987 
START ELABORAZIONE FARMACIA ID : 63 TPH_USERNAME : A0103019 
START SENDING DATA TO DB FARMID = 66 
... 
START SENDING DATA TO DB FARMID = 17 
[EE] ERORE ELABORAZIONE THREAD FARMACIA [EE] java.lang.ArrayIndexOutOfBoundsException: -1 
[EE] ERRORE ELABORAZIONE THREAD FARMACIA [EE] java.lang.ArrayIndexOutOfBoundsException: -1 
END CONSOLIDA STATUS FARMACIE 

Ø無法找到沒有錯,如果我調試。

我不能進去.get()方法,所以我不明白這行代碼是無效的。

+0

在級聯異常的可能情況下,使用e.printStackTrace()(或更好的記錄)來了解錯誤的原因。 – tucuxi

回答

0

什麼可至今說:你使用的ExecutorService的任務傳遞:

new StatusMultiThreading(id, username, psLog, connSTORY, connCF, mongoDatabase) 

後來,當你調用get()相應的任務被觸發。所以這個例外發生在你的這一類內部。

+0

可能是錯誤在這裏: \t \t [...]'List results = List.class.cast(payload.get(「result」)); \t \t \t \t results.remove(0); \t \t results.remove(0); \t \t results.remove(results.size() - 1); \t \t results.remove(results.size() - 1); '[...] –

+0

好,非常感謝 –

相關問題