2015-02-10 3 views
0

я следующий код:NullPointerException при попытке ConcurrentHashMap.get()

public class MyEvent implements org.apache.camel.Processor 
{ 
    static private final Map<Long, String> obj = new ConcurrentHashMap<Long, String>(); 

    @PostConstruct 
    public void postConstruct() 
    { 
     for (Object object : cacheList) 
     { 
      obj.put(object.getId(), object.getName()); 
     } 
    } 

    @Override 
    public void process(Exchange exchange) throws Exception 
    { 
     synchronized (obj) 
     { 
      String value = obj.get(number); 
     } 
    } 
} 

Иногда при запуске, у меня есть NullPointerException в этой строке:

String value = obj.get(number); 

Мой вопрос: Почему я получить эту ошибку и как ее исправить?

Java версия 1.6.0_32

+3

Где вы определяете число? Метод concurrentHashMap get может вызывать NPE, если ключ имеет значение null. – mkrakhin

+4

Что такое параметр 'number'? –

+0

используйте отладчик. –

ответ

7

Взгляните на JavaDocs

метод получения воли бросает NullPointerException если ключ является недействительным

Я предлагаю вам выполнить нулевую проверку на number, прежде чем вы будете называть get

+0

Я думаю, что проблема действительно может быть в «номере». , потому что у меня есть следующий StackTrace: ** CaughtExceptionType: java.lang.NullPointerException, CaughtExceptionMessage: нуль, StackTrace: java.lang.NullPointerException на java.util.concurrent.ConcurrentHashMap.get (ConcurrentHashMap.java:917) в MyEvent.process (MyEvent.java:61) ** где 61 - упомянутая строка. Я проверю, и если что-то я приду с обновлением. – simion

Смежные вопросы