java - JavaFX Hibernate 崩溃:java.lang.NoClassDefFoundError:无法初始化类
问题描述
我们正在使用 JavaFX、Maven 和 Hibernate 构建应用程序。
后端和前端都单独工作,没有任何问题。但是,如果我们在前端使用来自后端的任何函数,它会因“java.lang.NoClassDefFoundError:无法初始化类”错误而崩溃。
奇怪的是,如果我使用调试器在 Eclipse 中运行程序以找出它崩溃的位置,它就可以正常工作。我进行了很多搜索,但没有发现任何东西可以帮助解决问题。
我会apprechiate任何帮助,谢谢!
我们的 POM:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>Hopper</groupId>
<artifactId>TiLo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<hibernate.version>5.4.26.Final</hibernate.version>
<hibernate.annotations.version>3.5.6-Final</hibernate.annotations.version>
<hsqldb.version>2.4.1</hsqldb.version>
<mysql.version>8.0.23</mysql.version>
<junit-version>5.5.0</junit-version>
</properties>
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.version}</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>15</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId>
<version>15</version>
</dependency>
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<version>${hsqldb.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>${junit-version}</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-params -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>${junit-version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>${junit-version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M5</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<release>11</release>
</configuration>
</plugin>
<plugin>
<groupId>org.openjfx</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>0.0.4</version>
<configuration>
<mainClass>de.htwsaar.prog3.hopper.javafx.MainApp</mainClass>
</configuration>
</plugin>
</plugins>
</build>
堆栈跟踪:
März 23, 2021 8:55:18 AM org.hibernate.jpa.internal.util.LogHelper logPersistenceUnitInformation
INFO: HHH000204: Processing PersistenceUnitInfo [name: hibernate-persistence]
März 23, 2021 8:55:18 AM org.hibernate.Version logVersion
INFO: HHH000412: Hibernate ORM core version 5.4.26.Final
März 23, 2021 8:55:18 AM org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit>
INFO: HCANN000001: Hibernate Commons Annotations {5.1.2.Final}
März 23, 2021 8:55:18 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
WARN: HHH10001002: Using Hibernate built-in connection pool (not for production use!)
März 23, 2021 8:55:18 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001005: using driver [com.mysql.cj.jdbc.Driver] at URL [jdbc:mysql://localhost:3306/tilo_db]
März 23, 2021 8:55:18 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001001: Connection properties: {password=****, user=tilo_user}
März 23, 2021 8:55:18 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH10001003: Autocommit mode: false
März 23, 2021 8:55:18 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PooledConnections <init>
INFO: HHH000115: Hibernate connection pool size: 20 (min=1)
März 23, 2021 8:55:19 AM org.hibernate.dialect.Dialect <init>
INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQL8Dialect
März 23, 2021 8:55:19 AM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl$PoolState stop
INFO: HHH10001008: Cleaning up connection pool [jdbc:mysql://localhost:3306/tilo_db]
Exception in Application constructor
java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:464)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:363)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1071)
Caused by: java.lang.RuntimeException: Unable to construct Application instance: class de.htwsaar.prog3.hopper.javafx.MainApp
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:890)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
at java.base/java.lang.Thread.run(Thread.java:832)
Caused by: java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:64)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:481)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$8(LauncherImpl.java:802)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:455)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:427)
at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)
... 1 more
Caused by: java.lang.NoClassDefFoundError: Could not initialize class de.htwsaar.prog3.hopper.util.EntityManagerUtil
at de.htwsaar.prog3.hopper/de.htwsaar.prog3.hopper.dao.TaskDao.insertTask(TaskDao.java:45)
at de.htwsaar.prog3.hopper/de.htwsaar.prog3.hopper.javafx.MainApp.createTestData(MainApp.java:39)
at de.htwsaar.prog3.hopper/de.htwsaar.prog3.hopper.javafx.MainApp.<init>(MainApp.java:27)
... 14 more
Exception running application de.htwsaar.prog3.hopper.javafx.MainApp
这是它崩溃的类,但我认为它可能是任何类,因为这只是后端的第一个入口点:
package de.htwsaar.prog3.hopper.util;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
public class EntityManagerUtil {
private static final EntityManagerFactory
entityManagerFactory;
private static final String NAME_OF_PERSISTANCE_UNIT =
"hibernate-persistence";
static {
entityManagerFactory = Persistence.
createEntityManagerFactory(NAME_OF_PERSISTANCE_UNIT);
}
public static EntityManager getEntityManager() {
return entityManagerFactory.createEntityManager();
}
public static void closeEntityManager(
final EntityManager entityManager) {
entityManager.close();
}
}
解决方案
推荐阅读
- class - 函数未在范围内声明
- visual-studio-code - 当在 vscode 顶部显示另一个窗口时屏幕被破坏
- kotlin - 如何在 Kotlin/Native 中使用 UnsafeMutableRawPointer?
- python - 多处理一个队列并返回一个列表
- ios - 我可以在不使用 Apple App Store/TestFight 的情况下为 1000 人分发原生 iOS 应用程序吗?
- c# - 在使用另一个类的值转换为 json 时动态转换类属性名称
- laravel - Laravel 5.3 日志查询结果?
- python - 如何在可以将 numpy 矩阵转换为 Pandas 框架的类中创建方法?
- git - Git嵌套子模块无法克隆
- python - 通过 Python 更新现有的 excel 文件