2010-01-27 5 views
2

우리가 사용하는 제 3 자 라이브러리의 방법이 있습니다 (상용 솔루션이기 때문에 이름을 지정할 수 없습니다). 많이 params) :NullPointerException하지만 null 매개 변수가 함수에 전달되지 않았습니다.

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

저는 각 매개 변수가 null이 아닌지 확인합니다. 그러나 메서드 내에서 NullPointerException이 발생합니다.

어떻게 될 수 있습니까?

또한 스택 추적에 줄 번호가 없으므로 어떻게 디버깅 할 수 있습니까?

+1

디 컴파일러를 통해 jar를 실행하고 실제로 어떤 방법으로 작업 중인지 확인할 수 있습니다. 때로는 꽤 분명하고 때로는 그렇지 않습니다. 그것은 문서화를위한 좋은 대용품이다. – Seth

+1

당신은 타사 솔루션의 이름을 지정할 수 없다고 말했고 코드 스 니펫으로 정확히 수행했습니다. –

답변

3

매개 변수 중 하나의 멤버가 null이고 setPrice 메서드가 해당 매개 변수를 사용하려고했을 수 있습니다.

예를 들어 Currency 클래스의 구성원은 format 일 수 있습니다. c.format이 널 포인터 일 수 있습니다. 매개 변수의 각 구성원을 점검하십시오.

2

코드가 널 포인터를 역 참조 할 수있는 많은 방법이 있습니다.

사용자가 제공 한 값으로 배열을 색인화하고 널 포인터를 표시 할 수 있습니다.

소스가없고 지원이없는 경우에만 javap 명령으로 디 컴파일하여 디버거를 사용하여 바이트 코드를 단계별로 처리 할 수 ​​있습니다.

0
  • numerix 개체가 상태를 처리합니까? 어쩌면 당신이 그것을 초기화해야합니다.
  • 외부 리소스, 정적 리소스 등에 액세스합니까?
  • 소스가없는 경우 jd-gui 디 컴파일러를 사용하여 메소드가 잘못 될 수 있는지 검사하십시오.
1

명백한 가능성은 numerix가 null이라는 것입니다.

할 일은 예외에 대한 스택 추적을 확인하고 어떤 행을 던져보고 있는지 확인하는 것입니다. 호출에 대한 예외가 발생하고 있습니까, 아니면 함수 내부에서 오는 것입니까? 후자라면 Aaron의 답변으로 돌아갑니다. 매개 변수 중 하나는 null 멤버가있는 객체 일 수 있습니다. 또는 어딘가에서 내부 처리, 함수 자체 또는 잘못된 입력 버그로 인해 null 개체를 만드는 것입니다. (입력 내용을 확인하지 못한 것은 틀림없이 어떤 경우 든 버그입니다.)

소스 코드를 가지고 있습니까? 그렇다면 스택 트레이스가 식별하는 라인에서 집에있을 수 있습니다. 그렇지 않다면, 당신은 맹목적으로 일하고 있으며 최선을 다하면 모든 매개 변수를주의 깊게 체크 아웃 할 수 있습니다.

관련 문제