ClassNotFoundException和NPE同时

时间:2018-08-24 07:53:28

标签: java sql nullpointerexception classnotfoundexception

我的代码应该在数据库中搜索一条记录,该记录包含键入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)

1 个答案:

答案 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文件。这通常是诊断和修复的简单问题。但是您在异常处理方面的错误使它变得复杂。


因此,主要课程是:

  1. 别抓Exception
  2. 不要将方法声明为throws Exception
  3. 请勿使用return null表示出现了问题。让异常传播。