首页 > 解决方案 > 调用 EntityManagerFactory 时 JavaFX 窗口停止工作

问题描述

我正在研究 javafx 和 jpa,当我尝试通过视图上的操作连接数据库时,应用程序停止工作。我发现应用程序在调用 EntityManagerFactory 时停止工作,并且我尝试将保存到数据库的函数作为线程启动,因此视图不会停止工作,但数据永远不会发送到数据库。我相信没有必要运行它,因为线程一定是另一个问题,所以我删除了线程。当我运行该功能时,终端会给出以下消息:

    set 05, 2019 9:22:59 AM javafx.fxml.FXMLLoader$ValueElement processValue
        WARNING: Loading FXML document with JavaFX API of version 11.0.1 by JavaFX runtime of version 8.0.221
        set 05, 2019 9:23:01 AM org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformation
        INFO: HHH000204: Processing PersistenceUnitInfo [
            name: sistema
            ...]
        set 05, 2019 9:23:01 AM org.hibernate.Version logVersion
        INFO: HHH000412: Hibernate Core {5.2.12.Final}
        set 05, 2019 9:23:01 AM org.hibernate.cfg.Environment <clinit>
        INFO: HHH000206: hibernate.properties not found
        set 05, 2019 9:23:01 AM org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit>
        INFO: HCANN000001: Hibernate Commons Annotations {5.0.1.Final}
        set 05, 2019 9:23:02 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
        WARN: HHH10001002: Using Hibernate built-in connection pool (not for production use!)
        set 05, 2019 9:23:02 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
        INFO: HHH10001005: using driver [com.mysql.cj.jdbc.Driver] at URL [jdbc:mysql://localhost/hibernate?useTimezone=true&serverTimezone=UTC]
        set 05, 2019 9:23:02 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
        INFO: HHH10001001: Connection properties: {user=root, password=****}
        set 05, 2019 9:23:02 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
        INFO: HHH10001003: Autocommit mode: false
        set 05, 2019 9:23:02 AM org.hibernate.engine.jdbc.connections.internal.PooledConnections <init>
        INFO: HHH000115: Hibernate connection pool size: 20 (min=1)

就到此为止,别再做什么了。

FX控制器:

public class FXBairroController implements Initializable {

    @FXML
    private TextField fieldNome;
    @FXML
    private TextField fieldTaxa;

    private BairroController bController;

    @FXML
    private void onClickSalvar(ActionEvent event) {
        bController = new BairroController();
        Bairro b = new Bairro(fieldNome.getText(), new BigDecimal(fieldTaxa.getText()), true);
        bController.salvar(b);

    }

    @Override
    public void initialize(URL arg0, ResourceBundle arg1) {

    }
}

看法:

<children>
  <Button layoutX="199.0" layoutY="136.0" mnemonicParsing="false" onAction="#onClickSalvar" prefHeight="25.0" prefWidth="101.0" text="Salvar" />
  <Label layoutX="59.0" layoutY="47.0" text="Nome">
     <font>
        <Font size="14.0" />
     </font>
  </Label>
  <TextField fx:id="fieldNome" layoutX="59.0" layoutY="74.0" prefHeight="25.0" prefWidth="241.0" />
  <Label layoutX="59.0" layoutY="109.0" text="Taxa">
     <font>
        <Font size="14.0" />
     </font>
  </Label>
  <TextField fx:id="fieldTaxa" layoutX="59.0" layoutY="136.0" prefHeight="25.0" prefWidth="126.0" />

我的控制器

public Bairro salvar(Bairro bairro) {
    emf = Persistence.createEntityManagerFactory("sistema");
    em = emf.createEntityManager();

    try {
        em.getTransaction().begin();
        em.persist(bairro);
        em.getTransaction().commit();
    } catch (Exception ex) {
        System.out.println(ex);
    }

    return bairro;
}

调试应用程序我发现线程正在变成“mysql-cj-abandoned-connection-cleanup”并一直运行,直到我关闭进程。

https://i.stack.imgur.com/i9BF7.png

标签: javajpajavafxentitymanager

解决方案


推荐阅读