18

我必须在这里遗漏一些明显的东西......我正在尝试使用 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 应用程序,那就太好了。但是,如果我必须使用显式模块和类路径从命令行启动应用程序,这是可以接受的

4

3 回答 3

38

我将从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这些jars下面了。

JavaFX SDK

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

解决 JRE

我们需要为项目设置 JDK 11,所以从这里下载。然后打开 Eclipse 并将其添加到已安装的 JRE。我在下面看到Java -> Installed JREs -> Execution Environments11 版本的名称是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>

所以我将替换JDK11JavaSE-11,并刷新项目。我可以在下面看到JAVA DEPENDENCIESJRE 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-pathJavaFX 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 的第一次用户,所以我可能遗漏了一些明显的东西,也许其中一些步骤可以避免或简化。

于 2019-01-24T18:18:20.023 回答
1

启动.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"
于 2021-02-21T01:13:31.353 回答
-2

我想我找到了一个更简单的答案!

  1. 启动安装 JDK 的可执行文件,例如:jdk-8u201-windows-x64
  2. 重新安装并选择在本地安装包括 JavaFX 在内的额外功能。

安装程序完成后,Visual Studio 能够看到文件并且访问不再受到限制。

如果这不起作用,我之前在进行故障排除时做了另外两件事(这些都没有解决问题,但其中一个可能影响了重新安装 JDK 的结果):

  1. 我在 JDK 路径的末尾附加了一个斜杠,例如:“C:\Program Files\Java\jdk1.8.0_201\”

    1. 在重新安装 JDK 之前,我将 eclipse 连接到它并添加了非限制访问规则
于 2019-02-09T21:41:55.307 回答