记录一个JavaFX开发过程中遇到的错误, 在此之前JavaFX开发使用的是JDK1.8, 在JDK1.8版本自带了JavaFX的依赖Jar包.
后续需求要用到ARCGIS的技术, 于是找到了 ArcObjects SDK (Java) , 并下载了官方入门Demo按照步骤很快完成了基础配置,但是该项目要求使用JDK11,于是把JDK11也安装了,但是到最后一步运行时却提示了多个错误:
> Task :run
Exception in thread "WindowsNativeRunloopThread" java.lang.NoSuchMethodError: <init>
at javafx.graphics/com.sun.glass.ui.win.WinApplication.staticScreen_getScreens(Native Method)
at javafx.graphics/com.sun.glass.ui.Screen.initScreens(Screen.java:412)
at javafx.graphics/com.sun.glass.ui.Application.lambda$run$1(Application.java:152)
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)
at java.base/java.lang.Thread.run(Thread.java:834)
Exception in thread "JavaFX Application Thread" java.lang.NullPointerException
at javafx.graphics/com.sun.prism.d3d.D3DPipeline.getAdapterOrdinal(D3DPipeline.java:205)
at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.assignScreensAdapters(QuantumToolkit.java:738)
at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.runToolkit(QuantumToolkit.java:334)
at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.lambda$startup$10(QuantumToolkit.java:279)
at javafx.graphics/com.sun.glass.ui.Application.lambda$run$1(Application.java:153)
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)
at java.base/java.lang.Thread.run(Thread.java:834)
> Task :run FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':run'.
> Process 'command 'C:\Program Files\Java\jdk-11.0.5\bin\java.exe'' finished with non-zero exit value 1
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Get more help at https://help.gradle.org
BUILD FAILED in 1m 15s
4 actionable tasks: 2 executed, 2 up-to-date
Process 'command 'C:\Program Files\Java\jdk-11.0.5\bin\java.exe'' finished with non-zero exit value 1
18:33:15: Task execution finished 'run'.
错误原因:
同时安装了JDK1.8和JDK11
已知解决方案:
需要卸载掉JDK1.8, 并且将环境变量中的"JAVA_HOME"指向改成JDK11的目录
(此操作会导致原使用JDK1.8构建的JavaFX项目编译失败, 解决方法参考JavaFX官网文档 JavaFX and Intellij -> Non-modular from IDE -> 4. Add VM options)
处理完成后程序完美执行: