我将从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下可以看到这些jars。
虽然错误似乎已解决,但项目仍然无法构建。
解决 JRE
我们需要为项目设置JDK 11,所以从here下载。然后打开 Eclipse 并将其添加到已安装的 JRE。我在Java -> Installed JREs -> Execution Environments 下看到,11 版本的名称是JavaSE-11。
来自 helloFX 项目的 .classpath 文件还包含对 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>
所以我要用JavaSE-11 替换JDK11,然后刷新项目。我可以在JAVA DEPENDENCIES 下看到对JRE System Library [JavaSE-11] 的引用。
解决 JAVA_HOME
我们需要在 VSCode 中设置java.home。
这可以在 `Preferences->Settings->Workspace Settings 的 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 添加一个新条目,包括带有JavaFX SDK 本地路径的--module-path 和带有所需JavaFX 模块的--add-modules:
{
"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,所以我可能遗漏了一些明显的东西,也许其中一些步骤可以避免或简化。