java - 无法使用 JavaFX 使 JavaFX 应用程序在 Gluons "Getting started"页面之后工作

标签 java exception javafx gluon openjfx

依据:

已关注https://openjfx.io/页面学习 JavaFX。 该代码可以在另一台计算机上运行。我使用 git 上传到存储库。 下载到另一台电脑上。 旧计算机运行的是 Java 10。JDK 10。其中内置了 JavaFX(也是我最初选择它的原因)。 我认为我应该跟上最新的趋势(或者是我在 Java 方面看到的困惑局面)。 所以我在另一台计算机上下载了OpenJDK 13。按照上述页面,也下载了 OpenFX 13。 我确实收到了他们警告可能会出现的错误:

Error: JavaFX runtime components are missing, and are required to run this application

所以我遵循了“解决方案”。现在,当我按运行时,我不仅会看到一个奇怪的对话框,如下所示:

enter image description here

但是当我选择“ThaApp”时,我得到了另一个我无法理解的异常:

    Exception in Application start method
java.lang.reflect.InvocationTargetException
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:567)
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:464)
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:363)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:567)
    at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1051)
Caused by: java.lang.RuntimeException: Exception in Application start method
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:900)
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
    at java.base/java.lang.Thread.run(Thread.java:830)
Caused by: java.lang.IllegalAccessError: class com.sun.media.jfxmediaimpl.NativeMediaManager (in unnamed module @0x35c1057f) cannot access class com.sun.glass.utils.NativeLibLoader (in module javafx.graphics) because module javafx.graphics does not export com.sun.glass.utils to unnamed module @0x35c1057f
    at com.sun.media.jfxmediaimpl.NativeMediaManager.lambda$new$0(NativeMediaManager.java:110)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:554)
    at com.sun.media.jfxmediaimpl.NativeMediaManager.<init>(NativeMediaManager.java:107)
    at com.sun.media.jfxmediaimpl.NativeMediaManager$NativeMediaManagerInitializer.<clinit>(NativeMediaManager.java:78)
    at com.sun.media.jfxmediaimpl.NativeMediaManager.getDefaultInstance(NativeMediaManager.java:90)
    at com.sun.media.jfxmedia.MediaManager.canPlayProtocol(MediaManager.java:78)
    at com.sun.media.jfxmedia.locator.Locator.<init>(Locator.java:239)
    at javafx.scene.media.Media.<init>(Media.java:393)
    at mypack.ThaApp.start(ThaApp.java:32)
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:846)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:455)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:427)
    at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
    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)
    ... 1 more
Exception running application mypack.ThaApp

当然,上传到存储库的代码在 Java 10 上运行,并且有一堆 Eclipse 配置。但在将代码拉到另一台计算机上后,我确实在 eclipse 上将其更改为 Java 13。在“运行配置”以及“BuildPath”中。 我还在“构建路径”中尝试“手动”添加JavaFX jar,因此添加了一个“库”,如上述页面的解决方案中所示,我没有库,而是松散的 jar,但是也没有帮助。

这是一张我认为应该显示所需的所有库的图片:

enter image description here

在遵循本指南时,人们会遇到什么困难吗?人们在尝试让 JavaFX 正常工作时是否容易忘记一些事情?主要是在使用 OpenJDK 并且必须添加库或其他东西时?或者有人了解 Stacktrace 吗?或者甚至是那个奇怪的对话框?

但是主要问题。如何让代码发挥作用? 欢迎任何想法!

最佳答案

正如经常发生的那样。一旦我用语言表达了我的问题,事情就会发生。终于找到了解决方案,感谢这个答案

https://stackoverflow.com/a/53237667/7989121

显然需要将 javax.media 添加到运行配置中的这一行,如下所示:

--module-path /path/to/javafx-sdk-13/lib --add-modules javafx.controls,javafx.fxml,javax.media

正打算删除该问题,但是如果有人遇到同样的问题并找到此页面,他们可能会受益。如果 Stackoverflow 的大佬们认为没有必要,或者有人有权删除,那么一定要这么做:) 由于它只是运行配置,我敢打赌一旦我想将其放入可运行的 jar 中,就会出现问题。所以......会带着更多问题回来;) 平安归来!

关于java - 无法使用 JavaFX 使 JavaFX 应用程序在 Gluons "Getting started"页面之后工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60547771/

相关文章:

java - 如何将 "30.0"或 "30.00"解析为整数?

java - 实例化泛型类型 ArrayList<T>

java - 错误 : Exception in thread "main" java. lang.NullPointerException

c++ - 异常处理和从非 fatal error 中恢复

java - 如何在Java FX中设置相对单位的类别差距?

java - 如何使用版本方法 'valueOf(String)'

java - 将来自 RabbitMQ 的消息转换为字符串/json

spring - 使用 mockmvc 检查异常场景中的空内容主体

java - 加载位于 "src"maven 文件夹中的 fxml 文件

JavaFX-8:限制文本字段中的字符数