具有 VSCode 的 JavaFX-11
JavaFX-11 with VSCode
我肯定遗漏了一些明显的东西...我正在试验 VSCode(来自 Eclipse),但我无法让 VSCode 看到 JavaFX11图书馆。在导入语句中,所有对 JavaFX 组件的引用都标记为:
[Java] The import javafx cannot be resolved
在 Eclipse 中,这是用 "User Library" 处理的,它在 .classpath
中生成一个条目
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/JavaFX11">
<attributes>
<attribute name="module" value="true"/>
</attributes>
</classpathentry>
虽然 VSCode 似乎理解 Eclipse 中 .class 路径的其余部分,但它不理解这一点。用磁盘上的实际位置替换路径属性也不起作用。
为清楚起见:
- 这个问题专门针对 Java 11。在早期的 Java 版本中,JavaFX 是 JDK 的一部分。在Java11中,已移至一组外部模块中。
- 我不想使用 Maven 或 Gradle。我需要在不使用构建工具的情况下直接引用模块。
加分,如果VSCode也能直接执行JavaFX应用就好了。但是,如果我必须使用显式模块和 class-paths
从命令行启动应用程序,这是可以接受的
我要 运行 来自 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
所以我要用我本地的实际 jar 替换那个变量 JavaFX SDK:
<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
我们需要为项目设置JDK11,所以从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
。
这可以在 settings.json
`Preferences->Settings->Workspace Settings:
中完成
{
"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 的第一次使用,所以我可能错过了一些明显的东西,也许可以避免或简化其中一些步骤。
我想我找到了一个更简单的答案!
- 启动安装您的 JDK 的可执行文件
例如:jdk-8u201-windows-x64
- 重新安装并选择在本地安装 JavaFX 等额外功能。
安装程序完成后 Visual Studio 能够看到文件并且访问不再受到限制。
如果这不起作用,我之前在排除故障时做了另外两件事(这些都没有解决问题,但其中之一可能会影响重新安装 JDK ):
我在 JDK 的路径末尾附加了一个斜杠
例如:"C:\Program Files\Java\jdk1.8.0_201\"
- 在重新安装 JDK 之前,我将 eclipse 连接到它并添加了一个非限制访问规则
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"
我肯定遗漏了一些明显的东西...我正在试验 VSCode(来自 Eclipse),但我无法让 VSCode 看到 JavaFX11图书馆。在导入语句中,所有对 JavaFX 组件的引用都标记为:
[Java] The import javafx cannot be resolved
在 Eclipse 中,这是用 "User Library" 处理的,它在 .classpath
中生成一个条目<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/JavaFX11">
<attributes>
<attribute name="module" value="true"/>
</attributes>
</classpathentry>
虽然 VSCode 似乎理解 Eclipse 中 .class 路径的其余部分,但它不理解这一点。用磁盘上的实际位置替换路径属性也不起作用。
为清楚起见:
- 这个问题专门针对 Java 11。在早期的 Java 版本中,JavaFX 是 JDK 的一部分。在Java11中,已移至一组外部模块中。
- 我不想使用 Maven 或 Gradle。我需要在不使用构建工具的情况下直接引用模块。
加分,如果VSCode也能直接执行JavaFX应用就好了。但是,如果我必须使用显式模块和 class-paths
从命令行启动应用程序,这是可以接受的我要 运行 来自 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
所以我要用我本地的实际 jar 替换那个变量 JavaFX SDK:
<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
我们需要为项目设置JDK11,所以从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
。
这可以在 settings.json
`Preferences->Settings->Workspace Settings:
{
"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 的第一次使用,所以我可能错过了一些明显的东西,也许可以避免或简化其中一些步骤。
我想我找到了一个更简单的答案!
- 启动安装您的 JDK 的可执行文件 例如:jdk-8u201-windows-x64
- 重新安装并选择在本地安装 JavaFX 等额外功能。
安装程序完成后 Visual Studio 能够看到文件并且访问不再受到限制。
如果这不起作用,我之前在排除故障时做了另外两件事(这些都没有解决问题,但其中之一可能会影响重新安装 JDK ):
我在 JDK 的路径末尾附加了一个斜杠 例如:"C:\Program Files\Java\jdk1.8.0_201\"
- 在重新安装 JDK 之前,我将 eclipse 连接到它并添加了一个非限制访问规则
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"