【问题标题】:"AWT-EventQueue-0" java.lang.NullPointerException error on MySQL JDBC java projectMySQL JDBC java项目上的“AWT-EventQueue-0”java.lang.NullPointerException错误
【发布时间】:2013-12-11 15:11:08
【问题描述】:

我是 ubuntu 的新手,最近几天我安装了 eclipse 和 lamp 来处理已经在 windows7 上运行的项目。问题是相同的连接字符串不起作用。这是我尝试连接的女巫中的一段代码:

    String stringaConn = null;
        String nomeClasse = null;
        stringaConn = "jdbc:mysql://localhost/cinemapreverificasql?user=root";
        nomeClasse = "com.mysql.jdbc.Driver";
        try {
            Class.forName(nomeClasse);
            System.out.println("forName eseguito");
        } catch (ClassNotFoundException e) {
            System.out.println("Classe nomeClasse - Driver non trovata");
        }
        try {
            f.conn = DriverManager.getConnection(stringaConn);
            System.out.println("Aperta la connessione");
        } catch (SQLException e) {
            System.out.println("Stringa di connessione errata");
        }

它进入第二个捕获并打印字符串“Stringa di connessione errata”。这是一个输出示例:

forName eseguito
Stringa di connessione errata
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at gestioneDegliEventi.Gestione.windowOpened(Gestione.java:199)
    at java.awt.Window.processWindowEvent(Window.java:2048)
    at javax.swing.JFrame.processWindowEvent(JFrame.java:296)
    at java.awt.Window.processEvent(Window.java:2009)
    at java.awt.Component.dispatchEventImpl(Component.java:4861)
    at java.awt.Container.dispatchEventImpl(Container.java:2287)
    at java.awt.Window.dispatchEventImpl(Window.java:2719)
    at java.awt.Component.dispatchEvent(Component.java:4687)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
    at java.awt.EventQueue.access$200(EventQueue.java:103)
    at java.awt.EventQueue$3.run(EventQueue.java:694)
    at java.awt.EventQueue$3.run(EventQueue.java:692)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
    at java.awt.EventQueue$4.run(EventQueue.java:708)
    at java.awt.EventQueue$4.run(EventQueue.java:706)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

在互联网上搜索我尝试了更改连接字符串的解决方案:

jdbc:mysql://localhost:3306/cinemapreverificasql?user=root

并使用sudo ufw allow 3306 授予权限,但出现的错误是相同的。可能是什么错误?

【问题讨论】:

  • 那么第 199 行是什么?你在哪里初始化f
  • 在第 199 行有 stmSql = f.conn.prepareStatement("select * from film"); ,并且有错误原因 f.conn 为空。 f在构造函数中被初始化,connf对象中是public。

标签: java mysql eclipse jdbc lamp


【解决方案1】:

好的,现在您已经展示了实际爆炸的线路:

stmSql = f.conn.prepareStatement("select * from film");

f.conn 为空。那是因为当你给 f.conn 赋值时,如果出现任何问题,你会打印出一条错误消息,然后像什么都没发生一样继续:

try {
    f.conn = DriverManager.getConnection(stringaConn);
    System.out.println("Aperta la connessione");
} catch (SQLException e) {
    System.out.println("Stringa di connessione errata");
}

不要那样做。不要在这里捕获异常。你真的没有正确处理它,因为在catch语句之后你的对象not准备好使用了。您还会在不显示任何信息的情况下吞下异常,这使得找出真正错误的地方变得更加困难。

您展示的方法可能应该只是声明它可以抛出SQLException,然后不尝试捕获任何东西。这样,如果出现问题,您会立即停止,而不是在注定要失败时继续。

当您在实际记录异常的任何位置记录异常时,请记录整个异常 - 而不仅仅是一条说明有问题的消息。异常信息完全有可能告诉您连接字符串出了什么问题。

哦,您可能也不应该在 UI 线程中执行任何此类操作 - 但这是一个非常独立的问题。

【讨论】:

  • 好的,谢谢您的建议。问题只是权限问题,root 用户的密码在 win 上没有。
猜你喜欢
  • 1970-01-01
  • 2013-03-20
  • 1970-01-01
  • 2011-02-03
  • 1970-01-01
  • 1970-01-01
  • 2012-10-01
  • 2013-03-07
  • 1970-01-01
相关资源
最近更新 更多