Java UserException:尝试打开另一个进程当前正在使用的odb数据库文件

Java UserException:尝试打开另一个进程当前正在使用的odb数据库文件,java,objectdb,Java,Objectdb,我有一个在Netbeans IDE中正确运行的应用程序,但在构建它之后,它不会只是在某个时间运行,应用程序会在某个特定点停止响应事件。我能够在命令行中运行jar文件时重现这个问题,我得到了这个异常,我将它附加在这里 这就是我在与对象数据库交互时使用的数据类 public class DataClass { private EntityManager em = null; private EntityManagerFactory emf = null; private long accNo;

我有一个在Netbeans IDE中正确运行的应用程序,但在构建它之后,它不会只是在某个时间运行,应用程序会在某个特定点停止响应事件。我能够在命令行中运行jar文件时重现这个问题,我得到了这个异常,我将它附加在这里

这就是我在与对象数据库交互时使用的数据类

public class DataClass {

private EntityManager em = null;
private EntityManagerFactory emf = null;
private long accNo;
public DataClass() {
    connectDatabase();
}

public DataClass(long accNo) {
    this.accNo=accNo;
    connectDatabase();
}

private void connectDatabase() {
    if (emf == null) {
        emf = Persistence.createEntityManagerFactory("Atm.odb");

    }
    if (em == null) {
        em = emf.createEntityManager();
    }

}

public Customer getAccount(long id) {
    connectDatabase();
    try {
        TypedQuery q = em.createQuery("SELECT cu FROM Customer cu where cu.id= :id", Customer.class);
        q.setParameter("id", id);
        Customer c=(Customer)q.getSingleResult();
        closeConnections();
        return c;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}


public void closeConnections(){
    emf.close();
    em.close();
}
}

在搜索谷歌之后,我仍然不知道如何处理这个问题。但是,此异常仅在第二次运行应用程序后发生。如果我在重新启动系统后第一次运行应用程序。一切正常,但在关闭应用程序并重新运行后,会出现此问题。该应用程序是基于javafx构建的,尽管在第一种情况下您没有关闭应用程序。使用任务管理器并杀死它。 如果某个线程(通常是GUI)仍在运行,则可能会发生这种情况。
实际上,您应该预料到这种行为,并确保在Java应用程序中它已正确关闭-所有线程都已关闭。

在第一种情况下,您没有关闭应用程序。使用任务管理器并杀死它。 如果某个线程(通常是GUI)仍在运行,则可能会发生这种情况。
实际上,您应该预料到这种行为,并确保在Java应用程序中它已正确关闭-所有线程都已关闭。

正如上面Alex所观察到的,您的第一次运行可能尚未完成

还要检查是否关闭EntityManagerFactory以释放数据库文件


如果必须同时从多个进程访问数据库,则使用客户机-服务器模式,而不是嵌入式模式。

正如上面Alex所观察到的,您的第一次运行可能尚未完成

还要检查是否关闭EntityManagerFactory以释放数据库文件

如果必须同时从多个进程访问数据库,则使用客户机-服务器模式,而不是嵌入式模式