使用 JPakcage 进行 SQLite 部署的 JavaFx:应用程序在安装时不加载

问题描述

所以我正在尝试部署 JavaFX(使用 sqlite)桌面应用程序

  • 我使用的是 open-JDK-16、java SDK-16 和 sqlite.3.20.1 JDBC 驱动程序

  • 我正在开发 Intellij IDEA(2020.3.2 社区版),当我运行我的代码时,它工作正常

  • 如果数据库文件不存在,则将创建一个,并在其中创建一个表并填充一些数据 see my project folder

  • 使用 JPackage 部署后,安装程序已成功创建,我可以毫无问题地安装它

但是当我运行可执行文件时,它什么也没做,但是控制台窗口会在执行时显示下面的输出

在此先感谢您,感谢任何愿意帮助我解决此问题的人

这是我从窗口控制台收到的错误

Exception in Application start method
java.lang.reflect.InvocationTargetException
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(UnkNown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(UnkNown Source)
        at java.base/java.lang.reflect.Method.invoke(UnkNown Source)
        at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(UnkNown Source)
        at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(UnkNown Source)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(UnkNown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(UnkNown Source)
        at java.base/java.lang.reflect.Method.invoke(UnkNown Source)
        at java.base/sun.launcher.LauncherHelper$FXHelper.main(UnkNown Source)
Caused by: java.lang.RuntimeException: Exception in Application start method
        at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(UnkNown Source)
        at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(UnkNown Source)
        at java.base/java.lang.Thread.run(UnkNown Source)
Caused by: java.lang.NoClassDefFoundError: java/sql/Driver
        at java.base/java.lang.classLoader.defineClass1(Native Method)
        at java.base/java.lang.classLoader.defineClass(UnkNown Source)
        at java.base/java.security.SecureClassLoader.defineClass(UnkNown Source)
        at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(UnkNown Source)
        at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClasspathOrNull(UnkNown Source)
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(UnkNown Source)
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(UnkNown Source)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(UnkNown Source)
        at java.base/java.lang.classLoader.loadClass(UnkNown Source)
        at java.base/java.lang.class.forName0(Native Method)
        at java.base/java.lang.class.forName(UnkNown Source)
        at sample.Main.Connector(Main.java:27)
        at sample.Main.start(Main.java:17)
        at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(UnkNown Source)
        at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(UnkNown Source)
        at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(UnkNown Source)
        at java.base/java.security.AccessController.doPrivileged(UnkNown Source)
        at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(UnkNown Source)
        at javafx.graphics/com.sun.glass.ui.invokelaterdispatcher$Future.run(UnkNown Source)
        at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
        at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(UnkNown Source)
        ... 1 more
Caused by: java.lang.classNotFoundException: java.sql.Driver
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(UnkNown Source)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(UnkNown Source)
        at java.base/java.lang.classLoader.loadClass(UnkNown Source)
        ... 22 more
Exception running application sample.Main

解决方法

要解决该问题,请确保您已包含所有必需的模块,一旦我添加我的问题已解决,我就缺少一个 java.sql 模块