【发布时间】:2016-12-02 19:47:03
【问题描述】:
我正在 Eclipse 中编写一个 Java Swing 应用程序。我已经导出为可运行的 jar。当我运行它时。一切正常。所以我已经将相同的 JAR 发送到我的第二台机器。当我运行它时,令我惊讶的是,这是一个null pointer Exception。
下面是我的一段代码。
try {
String dburl = path.getDBUrl();
System.out.println(dburl);
textArea.append(dburl + "\n");
System.out.println(path.getSystemId + " s id \n");
textArea.append(path.getSystemId + "\n");
// connect to Excel
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();
Connection myConn = DriverManager.getConnection(dburl);
String queryString = "select sum(Pages) as totalUnitsCount,sum(TotalErrors) as totalError, Sum(IIF(Type Like 'Formatting Error ',(TotalErrors),0)) as FormsattingCount, Sum(IIF([Type] like 'X Ref Error ',(TotalErrors),0)) as [X ref CountErrs]," + "Sum(IIF(((Type Like 'Formatting Error ' and Critical<>0)),(Critical),0)) as FormsattingErrorCritical," + "Sum(IIF(((Type Like 'X Ref Error ' and Critical<>0)),(Critical),0)) as XRefErrorCritical," + "Count(IIF(((Type Like 'Formatting Error ' and NonCritical<>0)),1,null)) as FormsattingErrorNonCritical," + "Count(IIF(((Type Like 'X Ref Error ' and NonCritical<>0)),1,null)) as XRefErrorNonCritical" + " from [Quality Sheet$]";
statement = myConn.prepareStatement(queryString);
resultSet = statement.executeQuery();
ResultSetMetaData rsMetaData = resultSet.getMetaData();
System.out.println(rsMetaData.getColumnCount());
}
这在我的机器上运行良好,但在我的第二台机器上它在下面的行中抛出异常。
Connection myConn = DriverManager.getConnection(dburl);
这是我的 SetTheExcelPath 文件
public class SetTheExcelSrcPath {
String getSystemId = System.getProperty("user.name");
public String getDBUrl() {
return "jdbc:odbc:Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=C:\\Users\\" + getSystemId
+ "\\Desktop\\Quality Sheets\\quality_template.xlsx;";
}
}
请让我知道我哪里出了问题以及我该如何解决这个问题。
这里我的机器上没有出现异常,它被抛出到另一台机器上,如果问题出在我的机器上,我会调试的。
这是我的堆栈跟踪
java.lang.NullPointerException at
sun.jdbc.odbc.JdbcOdbcDriver.initialize(JdbcOdbcDriver.java: 453) at
sun.jdbc.odbc.JdbcOdbcDriver.connect(JdbcOdbcDriver.java: 153) at
java.sql.DriverManager.getConnection(Unknown Source) at
java.sql.DriverManager.getConnection(Unknown Source) at
Src.Files.TestExcel. < init > (TestExcel.java: 39) at
Src.Files.ReportsGeneratorGUI$3.actionPerformed(ReportsGeneratorGUI.java: 91)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) at
javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) at
javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) at
javax.swing.DefaultButtonModel.setPressed(Unknown Source) at
javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source) at java.awt.Component.processMouseEvent(Unknown Source) at
javax.swing.JComponent.processMouseEvent(Unknown Source) at
java.awt.Component.processEvent(Unknown Source) at
java.awt.Container.processEvent(Unknown Source) at
java.awt.Component.dispatchEventImpl(Unknown Source) at
java.awt.Container.dispatchEventImpl(Unknown Source) at
java.awt.Component.dispatchEvent(Unknown Source) at
java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) at
java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) at
java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) at
java.awt.Container.dispatchEventImpl(Unknown Source) at
java.awt.Window.dispatchEventImpl(Unknown Source) at
java.awt.Component.dispatchEvent(Unknown Source) at
java.awt.EventQueue.dispatchEventImpl(Unknown Source) at
java.awt.EventQueue.access$500(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$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) at
java.security.ProtectionDomain$JavaSecurityAccessImpl.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$JavaSecurityAccessImpl.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)
为了调试,我在文件中添加了以下代码。
try {
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance();
} catch (InstantiationException | IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (ClassNotFoundException e) {
textArea.append("Where is your Oracle JDBC Driver?\n");
e.printStackTrace();
return;
}
textArea.append("JDBC ODBC Driver Registered!\n");
Connection myConn;
try {
myConn = DriverManager.getConnection(dburl, "", "");
} catch (SQLException e) {
textArea.append("Connection Failed! Check output console\n");
e.printStackTrace();
return;
}
if (myConn != null) {
textArea.append("You made it, take control your database now!\n");
} else {
textArea.append("Failed to make connection!\n");
}
当我在我的机器上运行它时,我得到了
JDBC ODBC 驱动程序已注册!你成功了,控制你的数据库 现在!
当我在第二台机器上做同样的事情时,它给出了
已注册 JDBC ODBC 驱动程序!
但不返回连接状态。我哪里错了?
谢谢
【问题讨论】:
-
如果它告诉您确切的行,则无需调试。
-
嗨@KevinEsche,不,这不是。问题是,当我在另一个系统上执行此操作时。但在我的系统中,它运行良好
-
@KevinEsche,它说问题出在
DriverManager.getConnection(XX)行,这非常令人困惑 -
@KevinEsche,当我执行
sysout时,显示的字符串正是所需的路径。
标签: java swing jdbc nullpointerexception