我创建了一个jar文件,它会抛出以下错误,这是一个简单的swing应用程序,当我按下按钮时插入一行,不知道我哪里出错了,请指教。
private void jButton20ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
setatmid(jTextField2.getText());
setaa10(Integer.parseInt(jTextField3.getText()));
setaa20(Integer.parseInt(jTextField4.getText()));
setaa50(Integer.parseInt(jTextField5.getText()));
setaa100(Integer.parseInt(jTextField6.getText()));
try{
System.err.println("Inserting values in Mysql database table!");
Connection con = null;
String url = "jdbc:mysql://localhost:3306/";
String db = "agents";
String driver = "com.mysql.jdbc.Driver";
Class.forName(driver);
con = DriverManager.getConnection(url+db,"root","");
Statement st = con.createStatement();
String query="INSERT INTO schedule_data (`s_ID`, `schedule_date`, `atmID`, `notification`) VALUES ('"+System.currentTimeMillis()+"','2010-09-15','"+getatmid()+"','null')";
st.executeUpdate(query);
System.err.println("1 row affected");
} catch(Exception e) {
e.printStackTrace();
}
}
错误:
java.lang.IllegalStateException:zip文件已关闭
在java.util.zip.ZipFile.ensureOpen(未知来源)
在java.util.zip.ZipFile.getEntry(未知来源)
在java.util.jar.JarFile.getEntry(未知来源) at java.util.jar.JarFile.getJarEntry(Unknown Source) at sun.misc.URLClassPath $ JarLoader.getResource(Unknown Source) at sun.misc.URLClassPath.getResource(Unknown Source) 在java.net.URLClassLoader $ 1.run(未知来源) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Unknown Source) 在atmguis.atm.jButton20ActionPerformed(atm.java:588) 在atmguis.atm.access $ 1600(atm.java:25) 在atmguis.atm $ 17.actionPerformed(atm.java:226) 在javax.swing.AbstractButton.fireActionPerformed(未知来源) at javax.swing.AbstractButton $ Handler.actionPerformed(Unknown Source) 在javax.swing.DefaultButtonModel.fireActionPerformed(未知来源) 在javax.swing.DefaultButtonModel.setPressed(未知来源) 在javax.swing.plaf.basic.BasicButtonListener.mouseReleased(未知来源) at java.awt.Component.processMouseEvent(Unknown Source) 在javax.swing.JComponent.processMouseEvent(未知来源) 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.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) 在java.awt.EventDispatchThread.run(未知来源)
答案 0 :(得分:3)
从Event Dispatch Thread调用所涉及的方法。我确信这是问题的一部分。您正尝试从此线程访问包含com.mysql.jdbc.Driver
类的JAR文件。这是抛出错误的地方。我不得不怀疑这里是否存在某种并发问题。以下是一些应该解决的一般性说明。一旦解决了这些问题,请查看您是否仍有问题。
您不应该在EDT内部进行数据库查询。您应该从swing组件中收集所需的信息,然后使用Runnable
对象在不同的线程上执行SQL查询。在SO上搜索以在EDT上或从EDT执行代码以查找如何执行此操作的示例。这将确保您在等待SQL结果时不会锁定UI。
每次需要打开和关闭数据库连接时,最好留给SQL驱动程序及其内置的连接池功能。应该在某种已经具有SQL连接引用的控制器对象上声明此方法。然后,当调用此方法时,就像在最后一步中一样调用线程,该线程使用对已有的SQL连接的引用。
这将占用抛出异常的行并将其从EDT移出到某种设置阶段,大概是你可以更好地访问类文件。当然,这将是一个比EDT更受控制的环境。如果访问它仍然存在问题,那么在更受控制的环境中调试会更容易。
作为额外的奖励,您还将以更加强大的方式设计您的应用程序。