带有 VSCode 的 JavaFX-11
Posted
技术标签:
【中文标题】带有 VSCode 的 JavaFX-11【英文标题】:JavaFX-11 with VSCode 【发布时间】:2019-06-18 09:07:47 【问题描述】:我必须在这里遗漏一些明显的东西......我正在试验 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 的其余部分,但它并不理解这一点。用磁盘上的实际位置替换路径属性也不起作用。
为了清楚起见:
这个问题专门针对 Java 11。在早期的 Java 版本中,JavaFX 是 JDK 的一部分。在 Java 11 中,它已移至一组外部模块。 我不想使用 Maven 或 Gradle。我需要直接引用模块而不使用构建工具。另外,如果 VSCode 也可以直接执行 JavaFX 应用程序,那就太好了。但是,如果我必须使用显式的模块和类路径从命令行启动应用程序,这是可以接受的
【问题讨论】:
您看过这里的文档了吗? openjfx.io/openjfx-docs 我没有看到任何特定于 VSCode 的内容。使用 JavaFX-11 不是问题。问题是让它在 VSCode 中工作。 【参考方案1】:我将从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,所以我可能遗漏了一些明显的东西,也许其中一些步骤可以避免或简化。
【讨论】:
我下载了 VSC 和您指出的所有 Java 内容。一切都很顺利。"vmArgs": "--module-path /Users/<user>/Downloads/javafx-sdk-11.0.2/lib --add-modules javafx.controls,javafx.fxml",
有一个简单的问题。我不得不删除换行符并将其全部放在一行上并且它起作用了。我第一次尝试 Java 11。
@Sedrick 是的,我知道它只有一行,但我将其拆分,以便读者可以看到 --add-modules
部分。
感谢您的教程!
@José 您会将其添加到其他文档中吗? openjfx.io/openjfx-docs
哇 - 多么好的和令人惊讶的彻底答案!有趣的是,不需要设置java.home。但是,如果您想设置它,settings.json 文件可能不在指定的位置。要可靠地访问它,请打开命令面板 (Ctrl-Shift-P),然后选择命令“打开设置 (JSON)”。这将打开一个不错的编辑器,您可以在其中访问用户、工作区和文件夹设置。【参考方案2】:
launch.json
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
"type": "java",
"name": "Launch Current File",
"request": "launch",
"mainClass": "$file"
,
"type": "java",
"request": "launch",
"vmArgs": "--module-path /Volumes/Data/kits/installations/javafx-sdk-15.0.1/lib --add-modules=javafx.controls,javafx.fxml,javafx.graphics",
"mainClass": "application.Main",
"name": "Launch Main",
"projectName": "GooDay"
]
将此添加到 设置 json
"java.dependency.packagePresentation": "hierarchical",
"java.home":"/Library/Java/JavaVirtualMachines/jdk-15.0.1.jdk/Contents/Home"
【讨论】:
【参考方案3】:我想我找到了一个更简单的答案!
-
启动安装 JDK 的可执行文件
例如:jdk-8u201-windows-x64
重新安装并选择在本地安装包括 JavaFX 在内的额外功能。
安装程序完成后,Visual Studio 能够看到文件并且访问不再受到限制。
如果这不起作用,我之前在进行故障排除时做了另外两件事(这两件事都没有解决问题,但其中一件可能影响了重新安装 JDK 的结果):
我在 JDK 路径的末尾添加了一个斜杠 例如:“C:\Program Files\Java\jdk1.8.0_201\”
-
在重新安装 JDK 之前,我将 eclipse 连接到它并添加了非限制访问规则
【讨论】:
这个问题是关于 fx11 的。以上是关于带有 VSCode 的 JavaFX-11的主要内容,如果未能解决你的问题,请参考以下文章