依据:
已关注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
所以我遵循了“解决方案”。现在,当我按运行时,我不仅会看到一个奇怪的对话框,如下所示:
但是当我选择“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,但是也没有帮助。
这是一张我认为应该显示所需的所有库的图片:
在遵循本指南时,人们会遇到什么困难吗?人们在尝试让 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/