我必须在这里遗漏一些明显的东西......我正在尝试使用 VSCode(来自 Eclipse),但我无法让 VSCode 看到 JavaFX11 库。在 import 语句中,所有对 JavaFX 组件的引用都被标记:
[Java] The import javafx cannot be resolved
在 Eclipse 中,这是通过“用户库”处理的,它在 .classpath 中生成一个条目
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/JavaFX11">
<attributes>
<attribute name="module" value="true"/>
</attributes>
</classpathentry>
虽然 VSCode 似乎从 Eclipse 中理解了 .classpath 的其余部分,但它并不理解这一点。用磁盘上的实际位置替换路径属性也不起作用。
为了清楚起见:
另外,如果 VSCode 也可以直接执行 JavaFX 应用程序,那就太好了。但是,如果我必须使用显式模块和类路径从命令行启动应用程序,这是可以接受的
最佳答案
我将从 the OpenJFX samples 运行 Eclipse 的 HelloFX 示例。 .
使用 VSCode 打开示例后,我看到报告的错误:[Java] The import javafx cannot be resolved [268435846]
.
这显然意味着 JavaFX 类没有被解析,即使 .classpath 文件中有一个条目:
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/JavaFX11"/>
该库无法解析。
解决JavaFX SDK
因此,我将用本地 JavaFX SDK 中的实际 jar 替换该变量。 :
<classpathentry kind="lib" path="/Users/<user>/Downloads/javafx-sdk-11.0.2/lib/javafx.base.jar"/>
<classpathentry kind="lib" path="/Users/<user>/Downloads/javafx-sdk-11.0.2/lib/javafx.graphics.jar"/>
<classpathentry kind="lib" path="/Users/<user>/Downloads/javafx-sdk-11.0.2/lib/javafx.controls.jar"/>
<classpathentry kind="lib" path="/Users/<user>/Downloads/javafx-sdk-11.0.2/lib/javafx.fxml.jar"/>
刷新项目后,可以在
JAVA DEPENDENCIES
下看到这些 jar 。虽然错误似乎已解决,但该项目仍然无法构建。
解决JRE
我们需要为项目设置JDK 11,所以从here下载.然后打开 Eclipse 并将其添加到已安装的 JRE。我在
Java -> Installed JREs -> Execution Environments
下看到11 版本的名称是 JavaSE-11
..classpath
来自 helloFX 项目的文件还包含对 JRE 的引用:<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/
org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JDK11">
<attributes>
<attribute name="module" value="true"/>
</attributes>
</classpathentry>
所以我要替换
JDK11
与 JavaSE-11
,并刷新项目。我可以在 JAVA DEPENDENCIES
下看到有对 JRE System Library [JavaSE-11]
的引用.解决JAVA_HOME
我们需要设置
java.home
在 VS 代码中。这可以在
settings.json
中完成。从`首选项->设置->工作区设置:{
"java.dependency.packagePresentation": "hierarchical",
"java.home":"/Users/<user>/Downloads/jdk-11.0.2.jdk/Contents/Home"
}
修改后,你会得到一个弹出消息
Java Language Server configuration changed, please restart VS Code.
,所以重新启动它。试用
我们可以看到没有错误,甚至还有一个
bin
包含 VSCode 自动执行的构建结果的文件夹。我们可以运行它吗?如果我们尝试一下,我们会得到一个错误:
Error: JavaFX runtime components are missing, and are required to run this application
这是在不指定模块路径的情况下使用 JavaFX 11 时出现的错误。
解决 VM 参数
最后一步是添加所需的 vm 参数。
这可以在
launch.json
中完成。文件。它包含一个默认配置,我们可以修改它为 vmArgs
添加一个新条目包括 --module-path
带有 JavaFX SDK 的本地路径和 --add-modules
使用所需的 JavaFX 模块:{
"configurations": [
{
"type": "java",
"name": "CodeLens (Launch) - Main",
"request": "launch",
"vmArgs": "--module-path /Users/<user>/Downloads/javafx-sdk-11.0.2/lib
--add-modules javafx.controls,javafx.fxml",
"mainClass": "hellofx.Main",
"projectName": "hellofx"
}
]
}
现在我们已经设置好了一切。
再次运行该项目,它应该可以工作。
请注意,我是 VSCode 的第一次用户,所以我可能遗漏了一些明显的东西,也许其中一些步骤可以避免或简化。
关于带有 VSCode 的 JavaFX-11,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54349894/