首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaFX-11与VSCode

JavaFX-11与VSCode
EN

Stack Overflow用户
提问于 2019-01-24 15:18:41
回答 2查看 61.3K关注 0票数 21

我肯定遗漏了一些显而易见的东西..。我正在试验VSCode (来自Eclipse),但我无法让VSCode查看JavaFX11库。在导入语句中,所有对JavaFX组件的引用都标记为:

代码语言:javascript
复制
[Java] The import javafx cannot be resolved

在Eclipse中,这是通过一个“用户库”来处理的,它在.classpath中生成一个条目

代码语言:javascript
复制
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/JavaFX11">
    <attributes>
        <attribute name="module" value="true"/>
    </attributes>
</classpathentry>

虽然VSCode似乎理解.classpath的其余部分,但它不理解这一点。用磁盘上的实际位置替换path属性也不起作用。

为清楚起见:

  • 这个问题是关于Java11的,在早期的Java版本中,JavaFX是JDK的一部分。在Java 11中,它被移动到一组外部模块中。
  • 我不想使用Maven或Gradle。我需要直接引用模块而不用构建工具。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-24 18:18:20

我将从HelloFX运行OpenJFX样本示例。

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

这显然意味着JavaFX类不会被解析,即使在.classpath文件中有一个条目:

代码语言:javascript
复制
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/JavaFX11"/>

这个图书馆无法解决。

求解JavaFX SDK

因此,我将用本地JavaFX SDK中的实际jars替换这个变量

代码语言:javascript
复制
<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,所以从这里下载它。然后打开Eclipse并将其添加到已安装的JRE中。我在Java -> Installed JREs -> Execution Environments下面看到,11版本的名称是JavaSE-11

来自.classpath项目的helloFX文件还包含对JRE的引用:

代码语言:javascript
复制
<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中完成:

代码语言:javascript
复制
{
   "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所做的构建结果。

我们能查一下吗?如果我们尝试一下,我们会得到一个错误:

代码语言:javascript
复制
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

代码语言:javascript
复制
{
    "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的第一次用户,因此可能遗漏了一些显而易见的内容,并且可能可以避免或简化其中的一些步骤。

票数 41
EN

Stack Overflow用户

发布于 2021-02-21 01:13:31

launch.json

代码语言:javascript
复制
{
  // 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

代码语言:javascript
复制
 "java.dependency.packagePresentation": "hierarchical",
 "java.home":"/Library/Java/JavaVirtualMachines/jdk-15.0.1.jdk/Contents/Home"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54349894

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档