我的应用程序使用 javafx 11.0.1,并与 openjdk 11 的 jlinked 版本捆绑在一起。它对绝大多数用户来说运行良好,但很少有人得到这个堆栈:
Exception in thread "WindowsNativeRunloopThread" java.lang.NoSuchMethodError: <init>
at com.sun.glass.ui.win.WinApplication.staticScreen_getScreens(Native Method)
at com.sun.glass.ui.Screen.initScreens(Screen.java:412)
at com.sun.glass.ui.Application.lambda$run$1(Application.java:152)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)
at java.base/java.lang.Thread.run(Unknown Source)
Exception in thread "JavaFX Application Thread" java.lang.NullPointerException
at com.sun.javafx.tk.quantum.QuantumToolkit.assignScreensAdapters(QuantumToolkit.java:695)
at com.sun.javafx.tk.quantum.QuantumToolkit.runToolkit(QuantumToolkit.java:313)
at com.sun.javafx.tk.quantum.QuantumToolkit.lambda$startup$10(QuantumToolkit.java:258)
at com.sun.glass.ui.Application.lambda$run$1(Application.java:153)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)
at java.base/java.lang.Thread.run(Unknown Source)
我发现了一些与同一异常相关的讨论,但关于 Maven+Eclipse,here和here。这个问题非常相似,用户报告它,确实有其他 java 安装并卸载它们解决了这个问题,所以基本上将我捆绑的 openjdk 作为应用程序启动的唯一选项,但如果系统上安装了另一个 Java,则错误。 dll 被拾取,应用程序因上述堆栈跟踪而崩溃。
我尝试了建议的java.library.path
解决方法,但用户说它没有解决。不幸的是,我自己无法重现它,关于如何解决它或向报告它的用户询问什么的任何想法?
编辑:我们在此处修复了 lauch4j 生成的 exe和此处的 bash 脚本。这个想法基本上是限制/更改env 变量以避免错误的 dll 被拾取。PATH