为什么“异常”在任何地方都看不到?

时间:2013-05-16 14:11:21

标签: java exception-handling null nullpointerexception

我的代码很和平,写得不好,如下:

HashMap<String, TceFile> mapPresetLastKdf = new HashMap<String, TceFile>( (HashMap<String, TceFile>) RsessionVars.get( sessionVars, Constants.SVAR_ENC_PRESET_LAST_KDF_MAP ) );   
HashMap<String, String>  mapPresetApid    = new HashMap<String, String >( (HashMap<String, String >) RsessionVars.get( sessionVars, Constants.SVAR_ENC_PRESET_APID_MAP     ) );

显然,如果RsessionVars.get返回null,则第一行会失败。在这种情况下,第二行永远不会被执行。

然而,Eclips IDE并没有向我发出这个失败的信号,它继续执行,因为一切正常。

我很害怕我在这个代码中有很多地方。我怎样才能发现这些?

如何强制Eclipse停止并在这样的行上报告错误?

修改
这似乎是异常处理的问题。

HashMap<String, TceFile> mymap = new HashMap<String, TceFile>( null ); 

这应报告null指针异常 为什么这个例外在任何地方都看不到?

4 个答案:

答案 0 :(得分:1)

您可以捕获的异常与异常的逻辑原因之间存在差异,您根本无法捕获它。在这种情况下,null值的返回和后续设置是有效的事情。在随后的语句中,您可能尝试发送此变量(因此为null)某个方法,并且您将获得空指针异常。

在这种情况下,你只能打破后续的空指针异常,意识到原因是变量中的空值然后再使用代码中的断点返回并再次调试,以查看该空值的位置来自。

答案 1 :(得分:0)

您可能希望将代码分成多行,并使用条件断点(如果显示行号,可以通过右键单击行号)或使用带有正常断点的if语句。

过去我遇到过条件断点和日食问题,所以我通常选择后者。

答案 2 :(得分:0)

在创建HashMaps之前,您可以绕过eclipse并编写一些通知您错误的内容:

if (RsessionVars.get(sessionVars, Constants.SVAR_ENC_PRESET_LAST_KDF_MAP) == null)
    System.out.println("RsessionVars.get() returned null");

答案 3 :(得分:0)

也许您的工作区未正确设置来处理此类错误。如果你去Window - &gt;偏好 - &gt; Java - &gt;调试你应该有一个可用的选项列表。您可能想要研究的是“暂停执行未捕获的异常”。如果选中,Eclipse将在未捕获异常的情况下放置自动断点。

此外,如果你知道可能是什么类型的异常,你可以在Debug / Breakpoint窗口中添加一个“Java异常断点”(带有感叹号的“J”),这是一个很有用的功能。知道你在搜索什么。除此之外,将代码分隔成多行更容易阅读和调试。