我遇到以下错误,即最终.jar文件中未包含json.org依赖项。
Exception in thread "Thread-2" java.lang.NoClassDefFoundError: org/json/JSONTokener
at gui.Main.lambda$awake$0(Main.java:91)
at java.base/java.lang.Thread.run(Thread.java:830)
Caused by: java.lang.ClassNotFoundException: org.json.JSONTokener
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:602)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
... 2 more
然后我了解到可以将json.org jar文件添加为“提取目录”,这解决了我的问题。完成此操作后,我想我将尝试对JavaFX执行相同的操作。在尝试将其添加为“提取目录”时,我注意到它已经在此处列出(如下图所示)。
但是,如果我尝试使用java -jar [filename].jar
运行jar文件,则会得到Error: JavaFX runtime components are missing, and are required to run this application
。我可以使用java -jar --module-path /usr/local/javafx-sdk-11.0.2/lib --add-modules javafx.controls,javafx.fxml [filename].jar
来运行它,但是从理论上讲这不是必需的。我想知道是否有人知道为什么这行不通?谢谢。
注意:打包JavaFX确实很有用,因为这意味着我可以发送.jar文件,它可以直接使用,而无需用户设置额外的依赖项。