我的代码应该在数据库中搜索一条记录,该记录包含键入IDname JTextField的id。突然我出现了这个错误:
CGAffineTransform displayToCameraTransform = CGAffineTransformInvert([frame displayTransformForOrientation:[[UIApplication sharedApplication] statusBarOrientation] viewportSize:_viewportSize]);
我该怎么办?定义了字符串ID,为什么get(id)显示NPE?两个错误是否已连接?我也不太明白为什么我也有该ClassNotFoundException。这是代码:
java.lang.NullPointerException
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
java.lang.NullPointerException
at com.implementer.escuel.Implementing$1.actionPerformed(Implementing.java:55)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
答案 0 :(得分:1)
有关NPE的一般问题的解释,请参阅:
但是,关于此示例还有很多要说的。
同时获取ClassNotFoundException和NullPointerException。
实际上,您是一个接一个地获得它们。
发生这种情况的原因是您搞砸了异常处理的 recovery 方面。例如:
try {
// attempt to connect
return conn;
} catch(Exception e){
System.out.println(e);
}
return null;
这个问题有很多……但是,这给您带来麻烦的原因是您将null
作为Connection
返回。调用方不希望这样……然后尝试使用 null
连接并获得另一个异常。
实际上,方法应该要做的是允许异常传播,以便可以将其捕获到堆栈的上方...
第二个问题是您正在捕获java.lang.Exception
。那几乎总是一个坏主意。问题是Exception
将(几乎)匹配所有例外。为什么会有问题呢?因为如果您不知道刚刚捕获的异常意味着什么,就没有明智的恢复策略。 (仅在Exception
处理程序中可以安全执行的唯一操作就是导致应用程序关闭!)
第三个问题是您已将一种方法声明为throws Exception
。这意味着该方法的调用者必须捕获Exception
(不好)或传播Exception
(不好)。
现在,最可能的原始错误解释是运行时类路径上没有包含MySQL JDBC驱动程序的JAR文件。这通常是诊断和修复的简单问题。但是您在异常处理方面的错误使它变得复杂。
因此,主要课程是:
Exception
throws Exception
return null
表示出现了问题。让异常传播。