温馨提示:本文翻译自stackoverflow.com,查看原文请点击:visual studio code - JavaFX-11 with VSCode
java-11 javafx javafx-11 visual-studio-code

visual studio code - 带有VSCode的JavaFX-11

发布于 2021-03-28 01:06:36

我必须在这里遗漏一些明显的东西...我正在尝试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属性也不起作用。

为了清楚起见:

  • 这个问题专门针对Java11。在早期的Java版本中,JavaFX是JDK的一部分。在Java 11中,已将其移至一组外部模块。
  • 我不想使用Maven或Gradle。我需要不使用构建工具直接引用模块。

值得一提的是,如果VSCode也可以直接执行JavaFX应用程序,那就太好了。但是,如果我必须从命令行使用显式的模块路径和类路径启动应用程序,这是可以接受的

查看更多

提问者
Brad Richards
被浏览
88
José Pereda 2019-01-25 02:18

我将从OpenJFX示例运行Eclipse的HelloFX示例

使用VSCode打开示例后,我看到了报告的错误:[Java] The import javafx cannot be resolved [268435846]

JavaFX错误

显然,这意味着无法解析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这些罐子下面看到

JavaFX SDK

尽管错误似乎已解决,但该项目仍然无法构建。

解决JRE

我们需要为该项目设置JDK 11,因此请从此处下载它然后打开Eclipse并将其添加到已安装的JRE中。我看到Java -> Installed JREs -> Execution Environments11版本的名称是JavaSE-11

.classpathhelloFX项目中文件还包含对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>

所以我将替换JDK11JavaSE-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主页

修改后,你会看到一条带有消息的弹出窗口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丢失

这是使用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"
        }
    ]
}

现在我们已经准备好一切。

再次运行该项目,它应该可以正常工作。

运行JavaFX 11

请注意,我是VSCode的首次用户,因此我可能错过了一些显而易见的东西,也许可以避免或简化其中的一些步骤。