java - 问题 java.lang.IllegalStateException : zip file closed

标签 java swing jar

我创建了一个抛出以下错误的 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 file closed
at java.util.zip.ZipFile.ensureOpen(Unknown Source)
at java.util.zip.ZipFile.getEntry(Unknown Source)
at java.util.jar.JarFile.getEntry(Unknown Source) at java.util.jar.JarFile.getJarEntry(Unknown Source) at sun.misc.URLClassPath$JarLoader.getResource(Unknown Source) at sun.misc.URLClassPath.getResource(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) 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) at atmguis.atm.jButton20ActionPerformed(atm.java:588) at atmguis.atm.access$1600(atm.java:25) at atmguis.atm$17.actionPerformed(atm.java:226) 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.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)

最佳答案

所涉及的方法是从事件调度线程调用的。我确定这是问题的一部分。您正在尝试从此线程访问包含 com.mysql.jdbc.Driver 类的 JAR 文件。这是抛出错误的地方。我想知道这里是否存在某种并发问题。这里有一些一般性的注意事项,应该解决的问题。解决这些问题后,看看您是否还有问题。

  1. 您不应该从 EDT 内部进行数据库查询。您应该从 swing 组件收集所需的信息,然后使用 Runnable 对象在不同的​​线程上执行 SQL 查询。在 SO 上搜索在 EDT 上或下执行代码以查找如何执行此操作的示例。这将确保您的 UI 在您等待 SQL 结果时不会锁定。

  2. 每次需要时打开和关闭数据库连接最好留给 SQL 驱动程序及其内置的连接池功能。该方法应该在某种已经具有对 SQL 连接的引用的 Controller 对象上声明。然后,当调用此方法时,您将像上一步一样调用您的线程,该线程将使用对它已有的 SQL 连接的引用。

这将采用抛出异常的行并将其从 EDT 移到某种设置阶段,大概在这个阶段您可以更幸运地访问类文件。当然,这将是一个比 EDT 内更受控制的环境。如果访问它仍然存在问题,则在更受控的环境中进行调试会更容易。

作为额外的好处,您还将以更健壮的方式设计您的应用程序。

关于java - 问题 java.lang.IllegalStateException : zip file closed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3668483/

相关文章:

java - 将位置移向目标位置

java - 仅当在 Swing 中选择了所有子节点时才选择父节点

java.lang.UnsatisfiedLinkError : Unable to load library

java - 将字符串写入图像时,我得到一个又长又窄的图像 - 如何断线?

java - 我们可以在指定目录下使用maven命令行构建源代码的war文件吗?

java - 在非静态方法中,每次创建对象时都会重复该方法吗?

java - 如何在 Mac 上运行的 Java 应用程序上指定无边框?

java - 两个JTable共用滚动条

java - Build 后 LookAndFeel 发生了变化

java - 使用相同的资源位置执行和构建 maven2 java jar 项目