NullPointerException, но нулевые параметры не переданы в функцию - PullRequest
2 голосов
/ 27 января 2010

Есть метод сторонней библиотеки, который мы используем (я не могу назвать его, потому что это коммерческое решение), у которого есть метод, который более или менее похож на это (параметры lot и lot):

numerix.setPrice(Instrument instrument,YieldCurve yc,TradeDate date,Currency c,...)

Я на 100% уверен, что каждый передаваемый мной параметр не равен нулю. Все же я получаю исключение NullPointerException внутри метода.

Как это может быть?

Также у меня нет номера строки в трассировке стека, так как я могу его отладить?

Ответы [ 4 ]

3 голосов
/ 27 января 2010

Возможно, что член одного из ваших параметров имеет значение null, и метод setPrice пытается использовать это.

Например, класс Currency может иметь член format. c.format может быть вашим нулевым указателем. Проверьте каждый элемент параметров.

2 голосов
/ 27 января 2010

Есть много способов, которыми их код может разыменовать нулевой указатель без вашей помощи.

Они могут индексировать массив указанным вами значением и иметь нулевой указатель.

Если у вас нет исходного кода и у вас нет поддержки, ваш единственный выход - декомпилировать с помощью команды javap и использовать отладчик, который проведет вас через байт-код.

1 голос
/ 27 января 2010

Очевидная возможность, которая приходит на ум, в том, что цифра равна нулю.

Нужно проверить трассировку стека в исключении и посмотреть, какая строка его выбрасывает. Получаете ли вы исключение по вызову или оно происходит изнутри функции? Если последнее, вы вернетесь к ответу Аарона: одним из параметров может быть объект с нулевым членом. Или, может быть, где-то внутри обработки, функция создает нулевой объект из-за ошибки своих или неправильных входных данных. (Невозможность проверить входные данные, возможно, является ошибкой в ​​любом случае, но неважно.)

У вас есть исходный код? Если это так, вы можете найти строку, которую идентифицирует трассировка стека. Если нет, вы работаете вслепую, и лучшее, что вы можете сделать, это тщательно проверить все ваши параметры.

0 голосов
/ 27 января 2010
  • Обрабатывает ли объект Numberrix состояние?Возможно, вам придется инициализировать его тогда.
  • Имеет ли он доступ к внешним ресурсам, статическим ресурсам и т. Д.?
  • Если у вас нет исходного кода, используйте декомпилятор jd-gui, чтобы проверить метод и выяснить, может ли он работать неправильно.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...