在开始描述我是如何得到这个错误之前,这里有一些重要的信息:
1.在我的项目中使用module-info.java是必不可少的,因为jpackage不使用它就无法工作。
1.我使用SDK 14.0.2(这是启用包的最低版本)
1.任何评论都将受到赞赏;尽管如此,如果你要评论与使用特定VM参数相关的内容,我要求你按cnc +F来检查我是否已经使用了你要建议的参数-因为在我的build.gradle中有一堆VM参数-
好吧,让我们来看看我的问题:
首先,关注下面的VM参数:
"--add-opens=java.base/java.lang.reflect=com.jfoenix",
如果我不使用这个参数,程序运行时会弹出以下错误:
java.lang.reflect.InaccessibleObjectException: Unable to make boolean java.lang.reflect.AccessibleObject.setAccessible0(boolean)
accessible: module java.base does not "opens java.lang.reflect" to module com.jfoenix
重要->这是我的视图如何显示,而不使用提到的VM参数(让我们称之为图像1):https://snipboard.io/QJ5Fdc.jpg
“好吧,那么你为什么不直接使用VM参数呢?“好问题!好了,让我们将它添加到我的VM参数中,然后再次运行程序。
在这样做之后,这就是我现在的视图(让我们称之为图2):https://snipboard.io/fbhGxw.jpg
太好了!这正是我的视图应该是的样子(注意,考虑到它像预期的那样工作,我这次没有错误)。
所以,一切正常后,我终于可以继续运行我的jpackage gradle任务了。在这样做之后,事情就没有意义了,因为在通过.exe(由jpackage生成)执行我的程序之后,我的视图看起来像“image 1”视图,而不管我的项目在使用“run”gradle任务运行时是否正常工作。
有没有想过为什么会发生这种情况?(我的猜测是,我的module-info.java是解决这个问题的关键,因为每次我删除一个“打开”语句,例如:“打开my.package.name到javafx.fxml”,程序得到了几乎相等的错误)。
让我知道是否需要任何代码样本。所有的帮助将不胜感激。谢谢你,谢谢
- edit:related GitHub issue:enter link description here*
2条答案
按热度按时间hgqdbh6s1#
我发现正确解决这个问题的唯一方法是使用BurningWave:
添加依赖项后,只需将此代码复制/粘贴到
init()
方法中(此方法可以-并且应该-覆盖类中的init方法,该方法扩展了Application
类,这是JavaFX应用程序的入口点)vhmi4jdf2#
我不知道jpackage gradle任务是如何工作的,我通过控制台在jdk内部使用jpackage工具,并且在创建包时使用了此参数
在那里,我打开PaintPicker从场景构建工具包到javafx.fxml
正如你所看到的,我必须打开两个包(实际上是五个,但放在这里太多了),你必须为每个包指定
--add-opens
来打开我将使用jpackage打包应用程序的代码
当然,这只是一条线。
现在我将一步一步地解释它:
--module-path
此参数用于指定应用使用的所有模块的路径。包括应用程序.jar--module
此参数指定应用程序的主类。首先是模块名,然后是类的全名。--name
这是指定应用程序名称。-d
指定输出路径。--win-dir-chooser
在安装打包的应用程序时提供选择安装路径的选项--input
指定包含应用外部资源的文件夹--vendor
供应商的名称。也许你的名字--app-version
应用程序的版本--java-options
JVM选项我希望这对你有用,抱歉耽搁了。