Java 非空字符串上的NUllPointerException
我正在处理一个小的数据库任务,我似乎遇到了一个奇怪的nullPointerException,在那里我找不到问题 以下代码段是错误代码:Java 非空字符串上的NUllPointerException,java,nullpointerexception,Java,Nullpointerexception,我正在处理一个小的数据库任务,我似乎遇到了一个奇怪的nullPointerException,在那里我找不到问题 以下代码段是错误代码: Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at interfaces.FindDueActivityForFriend$1.actionPerformed(FindDueActivityForFriend.java:65) at java.awt.Butt
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at interfaces.FindDueActivityForFriend$1.actionPerformed(FindDueActivityForFriend.java:65)
at java.awt.Button.processActionEvent(Unknown Source)
at java.awt.Button.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$200(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
正如您所看到的,问题发生在FindDueActivityForFriend类的第65页中,更具体地说,在这个代码段中:
friendSearch = friendSearchField.getText();
console.out("Searching for the name that was entered");
console.out("friendSearch variable is: " + friendSearch );
if(con.GetNameExcists(friendSearch )){
//more code
错误发生在if语句中。
在这个if语句中,调用一个连接到数据库的类,检查数据库中是否已经存在一个名称,然后如果该名称已经存在于数据库中,则返回true
我已经在程序中使用了10次这种特定的方法,没有出现问题,但这次没有
控制台输出(“字符串”);在我调用它之前,我正在调用一个小的控制台窗口,它只打印我告诉它的内容,这是为了在不使用eclipse运行应用程序时拥有一个控制台
我试着打印变量只是为了看看它是什么,它不是空的。
以下是控制台的复制粘贴:
[Wed May 14 20:04:26 CEST 2014] [INFO] Opened the findDueForFriend screen
[Wed May 14 20:04:30 CEST 2014] [INFO] Searching for the name that was entered
[Wed May 14 20:04:30 CEST 2014] [INFO] FriendSearch variable is: Ylva
我进入了ant调试器,它甚至没有进入该方法,它在实际打开该方法之前抛出null指针
我不知道我做错了什么,所以如果有人有任何建议,请张贴他们
为了完整起见,这里还有变量的声明:
String friendSearch;
public FindDueActivityForFriend(Console Console){
console = Console;
friendSearch = "";
我甚至尝试将该字符串声明为空字符串,不确定这是否会使其不为null,但我认为它应该为null,并且控制台窗口在抛出null指针异常之前清楚地显示该字符串包含某些内容…如果它出现在这个if语句中
if(con.GetNameExcists(friendSearch ))
您知道friendSearch不是null,那么con必须是null,以便在if语句中获得NullPointerException。下面代码的唯一可能性是
if(con.GetNameExcists(friendSearch ))
con
为null
或friendSearch
为null
,您可以在
开始该方法并执行一些操作,如friendSearch.caoncat
或其他操作
大多数情况下,它应该是con为空
尝试在日志中打印
con
值。如果con.getNameExcists(…)返回Boolean而不是Boolean,并且可能返回null,那么您将从自动取消装箱中获得null点异常。您描述的所有内容都表明con
可能是null
。你是怎么证实它不是的?啊。jup忘了初始化con变量,真不敢相信我只是花了一个小时试图修复字符串,忘了查看con变量jup,正如上面的评论中所述,我看不到它不是字符串而是con变量。。。。很抱歉打扰您,但感谢大家对我的邮件的快速回复failing@Ylva将来解决这个问题的一个简单方法是查看行上的哪些引用在if语句中实际被取消引用,并且在if语句中只有con。好的,那么您要说的是,如果friendSearch为null,它不会在这一行中抛出null指针,但会在使用它的GetNameExcists方法的第一行中抛出它?是的,至少理想情况下是这样,但这可能取决于编译器。行信息有时不能完美地翻译,您最终会得到一个不正确的行号,至少在某种程度上接近实际行号。我不记得我是否在Java中见过这种情况,尽管我使用了Oracle实现,但我肯定在我使用过的其他一些语言中见过这种情况。在这种情况下,如果friendSearch为null,那么这与调用GetNameExcists(null)是一样的,最终GetNameExcists将尝试在它自己的一行代码上遵从该null值,并且您将在那里得到异常。感谢您的详细解释,我已经运行了一些测试,并且确实知道在哪里执行GetNameExcists(null)(当确保变量为空时)然后它确实会继续运行,直到在该方法中,我不知道java的行为是这样的,但在以后的调试问题中我会记住这一点。它返回一个布尔值,但如上所述,问题在于con变量的初始化