使用带有 FX 的 OpenJDK 的 Azul Zulu Builds 将 JavaFX 项目升级到 JDK 17 后,为什么 IDEA 找不到 JavaFX 包?

2024-01-12

我有一个 Java FX 项目,并使用以下 Azul Zulu Build of OpenJDK with JavaFX 将项目升级到 JDK 17

有谁知道为什么 Intellij 无法从 Azul Zulu Builds of OpenJDK with FX 中找到使用 JDK 17 的 JavaFX 包吗?


我提供两种解决方案:

  1. 使用包含 JavaFX 模块的 Azul 发行版(这正是您所要求的),

  2. 使用不包含 JavaFX 的 Azul 发行版,并通过构建工具使用 Maven Central 中的 JavaFX 模块。

我推荐使用构建工具的解决方案 2。它的设置速度更快一些,并且为未来的开发工作提供了更便携、灵活和可扩展的方法。

替代 JDK

这些指令也应该可以完美地适用于其他 JDK 和 JavaFX 发行版,例如 Belsoft Liberica、Amazon Correto 和 Eclipse Temurin 打包的发行版。

要使用 JDK 的替代供应商,请选择从所选供应商处下载适当的版本:

  1. 手动使用添加 JDK 选项,如下所述,或者
  2. 自动让 Idea 从您选择的供应商执行下载(使用“下载 JDK”选项,如下所述)。

解决方案 1:使用带有内置 JavaFX 模块的 Azul 发行版

下载 Azul JDK:

  1. 转到 Azul 下载站点,选择适当的版本、平台和软件包 (使用 JDK FX 作为包而不是 JDK)
  • 这是我基于 Intel 的 Mac 版本的链接,但您的链接可能会有所不同,具体取决于您的系统架构:

  1. 将下载的包解压到您计算机上的某个位置。

创建一个Java项目 https://www.jetbrains.com/help/idea/creating-and-running-your-first-java-application.html (not一个新的 JavaFX 项目):

  1. 文件|新项目... |爪哇

  2. 项目SDK |添加JDK...

  3. 选择您通过 JavaFX 下载解压 Azul JDK 的位置。

  4. 保留默认选项,选择“下一步”几次。

  5. 为项目命名并选择“完成”。

创建一个 JavaFX HelloWorld.java 类:

  1. 右键单击 src,选择新建| JavaFX 应用程序。

  2. 将其命名为HelloWorld。

  3. 将 HelloWorld 应用程序的内容编辑为:

    import javafx.application.Application;
    import javafx.scene.Scene;
    import javafx.scene.control.Button;
    import javafx.stage.Stage;
    
    public class HelloWorld extends Application {
    
        public static void main(String[] args) {
            launch(args);
        }
    
        @Override
        public void start(Stage primaryStage) {
            primaryStage.setScene(new Scene(new Button("hello, world")));
            primaryStage.show();
        }
    }
    

使用 Azul JDK + JavaFX 运行时在 IDE 中运行新的 JavaFX 应用程序 https://www.jetbrains.com/help/idea/running-applications.html:

  1. 打开 HelloWorld.java 类,单击装订线中的运行应用程序图标,然后选择运行“HelloWorld.main()”。

故障排除

如果执行上述操作后找不到 JavaFX 类,则您可能没有使用包含 JavaFX 的 JDK。

在这种情况下,除非您将 JDK 版本更改为包含 JavaFX 的版本,否则您应该从以下位置下载 JavaFX SDK:openjfx.io https://openjfx.io/并遵循此处提供的 Idea 项目设置信息。


解决方案 2:使用 Azul,但从 Maven Central 获取 JavaFX 模块

下面的解决方案是将 Azul 运行时与使用 Maven(或 Gradle)从 Maven 中央存储库获取的 JavaFX 模块结合使用。

创建 JavaFX 项目 https://www.jetbrains.com/help/idea/javafx.html:

  1. 文件|新 |项目... | JavaFX
  2. 将项目名称编辑为您想要的任何名称。
  3. 保留默认选项,选择“下一步”|结束。

在您的项目中下载并使用 Azul JDK https://www.jetbrains.com/help/idea/sdk.html#jdk-from-ide

  1. 文件|项目结构|项目SDK |下载JDK...
  2. 选择供应商 Azul Zulu 社区。
  3. 下载 |好的

如果您想在 IDE 设置中使用 Azul,而不是用于新 Java 项目的默认 JDK,则只需执行 Azul 下载和添加步骤。

使用 Azul JDK 运行时和 maven JavaFX 模块在 IDE 中运行新的 JavaFX 应用程序 https://www.jetbrains.com/help/idea/running-applications.html:

  1. 打开 HelloApplication.java 类,单击装订线中的运行应用程序图标,然后选择运行“HelloApplication.main()”。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用带有 FX 的 OpenJDK 的 Azul Zulu Builds 将 JavaFX 项目升级到 JDK 17 后,为什么 IDEA 找不到 JavaFX 包? 的相关文章

随机推荐

  • AngularJS 访问指令模板内的 DOM 元素

    是否有一种更 有角度 的方式在指令模板中选择 DOM 元素 例如 假设您有以下指令 app directive myDirective function return template div ul li li ul div link fu
  • C# 将字符串解析为 int32 - 值太大

    我从外部接口收到一个字符串 其中包含INT32价值 该值表示 100 一个有符号整数 因此看起来像这个字符串 4294967196 如果它看起来像 100 我可以使用Int32 TryParse 将其转换为有符号值 但就我而言 它按原样解释
  • Android 联系人提供程序:如何设置主要电话号码

    添加或更新联系人以构建自定义联系人提供程序时 如何将联系人的电话号码设置为主要号码 添加和更新联系人工作正常 但我不知道如何将联系人的一个号码设置为主要号码或默认号码 mValues put Phone IS PRIMARY 1 mValu
  • gvim 中的错误 - 到哪里报告? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我最近在 LaTeX 的 gvim 即 vim 的 gui 语法突出显示中遇到了一个错误 它可以在多个平台上重现 debian ubuntu 中的 v
  • 无法捕获的 ChuckNorrisException

    是否可以构造一段代码Java http en wikipedia org wiki Java 28programming language 29这将产生一个假设java lang ChuckNorrisException无法捕捉 想到的想法
  • Ruby on Rails - 捆绑包安装期间出错

    我一直在下面搜索这个错误 但无法解决这个错误 Gem Ext BuildError ERROR Failed to build gem native extension usr bin ruby2 1 extconf rb mkmf rb
  • 使用 mina 部署子目录

    有没有办法通过 Mina 部署 repo 的子目录 我见过人们使用自定义部署策略通过 Capistrano 来实现这一点 我希望能够通过 Mina 来实现这一点 请查看这个回购协议 https github com thopham mina
  • chrome.tabs.executeScript 抛出错误“运行 tabs.executeScript 时未检查runtime.lastError:无法访问 url 的内容...”

    所以我试图在background js 中执行来自外部源 例如www script google com 的脚本 但我收到这个错误 Unchecked runtime lastError while running tabs execute
  • 返回对向量成员变量的引用

    我有一个向量作为类中的成员 我想通过 getVector 函数返回对它的引用 以便以后能够修改它 将函数 getVector 练习为 const 不是更好吗 但是 我在以下代码中收到错误 限定符在类型的绑定引用中被删除 应该修改什么 cla
  • 填充 CSV 文件中的空白

    我有一个 CSV 文件 其中某些列为空 例如 oski14 safe 0 13 53 4 oski15 Unknow 0 oski16 Unknow 0 oski17 Unknow 0 oski18 unsafe 0 55 1 2 oski
  • codeigniter php 有论坛吗? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有基于codeigniter的论坛软件 免费还是商业 我自己还没有尝试过其中任何一个 但我听说过非常
  • Java 中的 SQLite 连接池 - 锁定数据库

    我已经阅读了一些有关多线程环境中 SQLite 的相关主题 但我找不到明确的说法 所以请原谅我再次提出这个主题 我需要从多个线程访问应用程序的数据库以执行更新语句 数据库本身可以是 SQLite 或 MySQL 具体取决于用户的选择 对于
  • Nestjs 的 Swagger Codegen

    我已经使用 Swaggerhub 创建了 api 端点 并成功导出以与 asp net core 一起运行 我想用 Nestjs 测试相同的 api 但我发现用 openapi 进行记录 但反之则不然 将 yaml 转换为 Nodejs 有
  • Grails 日期绑定

    在 Grails 中 可以在控制器中 bindData Book b new Book bindData b params 如果我有一个来自用户输入的具有特定格式 例如 yyyy MM dd 的日期字段怎么办 在Spring中 我们可以使用
  • 如果未找到 Wi-Fi AP,则不会调用 NetworkCallback 的 onUnavailable() 方法

    我正在尝试将我的智能手机连接到 IOT 设备制作的 AP 我将connectivitymanager requestNetwork 与NetworkCallback 一起使用 一切正常 直到我关闭我的AP 并且显然requestNetwor
  • 文件错误(文件,“rt”):无法打开连接[重复]

    这个问题在这里已经有答案了 我是 R 新手 在广泛研究此错误后 我仍然无法找到解决方案 这是代码 我检查了我的工作目录 并确保文件位于正确的目录中 欣赏它 谢谢 pollutantmean lt function directory pol
  • 在选项卡内切换选项卡

    MainActivity java public class MainActivity extends FragmentActivity Fragment TabHost as mTabHost private FragmentTabHos
  • 从一个领域异步复制到另一个领域

    据我了解 Realm只能 应该从主线程访问 我使用两个领域 一个用于存储 脏 数据 这些数据在验证后将被移动到真实领域 到目前为止一切顺利 但我找不到在主线程之外执行此操作的方法 如果我使用写入真实领域realm executeTransa
  • Android:将 android.net.Uri 对象保存到数据库

    我想做的是从用户那里获取选定的铃声 设置 AlarmManager 闹钟以在闹钟关闭时播放该铃声 但我需要将铃声保存在数据库中 以便在手机重启后重置所有警报 我的问题是将铃声 Uri 保存到数据库以便稍后检索的最佳方法是什么 我尝试了以下方
  • 使用带有 FX 的 OpenJDK 的 Azul Zulu Builds 将 JavaFX 项目升级到 JDK 17 后,为什么 IDEA 找不到 JavaFX 包?

    我有一个 Java FX 项目 并使用以下 Azul Zulu Build of OpenJDK with JavaFX 将项目升级到 JDK 17 有谁知道为什么 Intellij 无法从 Azul Zulu Builds of Open