JavaFX在导出可执行文件时所遭遇的问题以及解决办法

其实导出可执行文件这最后一步本应是非常简单的,但是由于忽视各种细节,导致不能成功,耗费太多时间。

在一个JavaFX项目如果第一次对项目进行Generate ant build.xml and run时,报出以下提示时:

"Not a JDK", "The project is attached to a JRE only so ant would be started with a JRE which does not have a compiler. Would you like to proceed and select a JDK?"

JavaFX在导出可执行文件时所遭遇的问题以及解决办法_第1张图片

务必不要忽略,虽然点击No后面也没有什么明显的异常,但是为失败埋下了伏笔。我之前都是没有正确对待这个地方,所以后来就出现了:

 [taskdef] Could not load definitions from resource com/sun/javafx/tools/ant/antlib.xml. It could not be found.

 BUILD FAILED
E:\Projects\CheckHomeworkRandom\build\build.xml:216: Problem: failed to create task or type javafx:com.sun.javafx.tools.ant:resources
Cause: The name is undefined.
Action: Check the spelling.
Action: Check that any custom tasks/types have been declared.
Action: Check that any / declarations have taken place.
No types or tasks have been defined in this namespace yet
等错误。

正确解决办法是,点击Yes,如果对话框里面没有显示jdk的话,那说明你需要重新 对Eclipse里面的JRE进行配置了(注意,不要点击Yes或者No,而是应当 直接点击右上角的关闭,这样下次运行的时候还会出现这个对话框,以便于能改,不然就得重新建立一个工程了),虽然以前那样默认的配置没有出现什么错误,但是对于JavaFX不行。依次  Window->Preferences Add Java JDK

JavaFX在导出可执行文件时所遭遇的问题以及解决办法_第2张图片

JavaFX在导出可执行文件时所遭遇的问题以及解决办法_第3张图片

这里虽然有点令人感到奇怪,但是默认的Jre目录的确不行,必须将JRE HOME的路径改为JDK的路径,具体我也没有深究,但是事实就是这样,不知道这算不算是Eclipse的BUG。然后再次Generate ant build.xml and run弹出对话框时就可以点击Yes选择JDK了!



这样,再进行Generate ant build.xml and run就不会出现以上的错误了,正常情况下会在build文件夹下生成一个jar包。


但是现在导出的Jar文件如果还是不能运行的话,通过cmd进入刚才的jar包的目录下,用java -jar XXXX.jar 来运行一下看看有什么错误,如果是和Caused by: java.lang.IllegalStateException: Location is not set.有关的,看看是不是由于FXML文件没有加载出来的错误

JavaFX在导出可执行文件时所遭遇的问题以及解决办法_第4张图片

JavaFX在导出可执行文件时所遭遇的问题以及解决办法_第5张图片

如果是的话,一定要注意在加载FXML文件时要用fxmlLoader.setLocation(getClass().getResource("/yixianyong/view/RootLayout.fxml"));或者类似的

而不是fxmlLoader.setLocation(getClass().getResource("../view/RootLayout.fxml"));或者类似的


好了最后还有一点需要注意的是,不算是错误,但是是个问题和麻烦,就是将Resource打包到应用的问题,这个我不细说了,大家可以从http://www.yiibai.com/javafx/fxbuild.html

这个网页里的部署那一部分仔细看一下步骤,应该没有什么问题的。


再过三天就要Oracle考试了,然后就是Java考试,再两三天天就是操作系统考试以及数据结构还有概率论的考试,感觉很慌啊!还有高性能计算的大作业,可支配 的时间 已经不多了!我前几日还没有开始正式准备,我觉得我处境非常危险了。加油吧,从现在开始,从今晚开始。

你可能感兴趣的:(JavaFX)