&引用;AWT-EventQueue-0“;MySQL JDBC java项目上的java.lang.NullPointerException错误
我是ubuntu新手,在过去的几天里,我安装了eclipse和lamp来处理一个已经在windows7上运行的项目。问题是相同的连接字符串不起作用。下面是我尝试连接的witch中的一段代码:&引用;AWT-EventQueue-0“;MySQL JDBC java项目上的java.lang.NullPointerException错误,java,mysql,eclipse,jdbc,lamp,Java,Mysql,Eclipse,Jdbc,Lamp,我是ubuntu新手,在过去的几天里,我安装了eclipse和lamp来处理一个已经在windows7上运行的项目。问题是相同的连接字符串不起作用。下面是我尝试连接的witch中的一段代码: String stringaConn = null; String nomeClasse = null; stringaConn = "jdbc:mysql://localhost/cinemapreverificasql?user=root"; no
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");
}
它进入第二个catch并打印字符串“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)
在internet上搜索时,我尝试了在以下位置更改连接字符串的解决方案:
jdbc:mysql://localhost:3306/cinemapreverificasql?user=root
并使用
sudo ufw allow 3306授予权限,但出现的错误相同。可能是什么错误?好的,现在您已经显示了实际发生爆炸的线路:
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语句之后,您的对象还没有准备好使用。您也在吞咽异常,而不显示其中的任何信息,这使得找出真正的错误变得更加困难
您展示的方法应该声明它可以抛出SQLException
,然后不尝试捕获任何内容。这样,如果出现问题,你会立即停止,而不是在注定要失败的时候继续
当您在实际记录异常的地方记录该异常时,请记录整个异常,而不仅仅是一条说明有问题的消息。异常信息完全可能会告诉您连接字符串到底出了什么问题
哦,您可能也不应该在UI线程中执行这些操作,但这是一个非常独立的问题。那么第199行是什么?您在哪里初始化f
?在第199行有stmSql=f.conn.prepareStatement(“从胶片中选择*)代码>,并且存在错误原因。f.conn
为空f
在构造函数中初始化,conn
在f
对象中是公共的。好的,谢谢你的建议。问题只是权限问题,root用户有一个win上没有的密码。