我必须在这里遗漏一些明显的东西...我正在尝试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的其余部分,但它不理解这一点。用磁盘上的实际位置替换path属性也不起作用。
为了清楚起见:
值得一提的是,如果VSCode也可以直接执行JavaFX应用程序,那就太好了。但是,如果我必须从命令行使用显式的模块路径和类路径启动应用程序,这是可以接受的
我将从OpenJFX示例运行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
这些罐子下面看到。
尽管错误似乎已解决,但该项目仍然无法构建。
解决JRE
我们需要为该项目设置JDK 11,因此请从此处下载它。然后打开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
在VSCode中设置。
可以在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
其中包括--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的首次用户,因此我可能错过了一些显而易见的东西,也许可以避免或简化其中的一些步骤。
我下载了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-Shft-P),然后选择命令“打开设置(JSON)”。这将打开一个不错的编辑器,您可以在其中访问用户,工作空间和文件夹设置。