走进JavaFX-(1u1)

本文介绍JavaFX 1.0发布后的变化,并提供一个可在正式版中运行的简单示例,演示如何创建一个包含按钮的应用程序。
/**
以前写了一个JavaFX入门例子,但由于JavaFX正式版中变化较大,那个例子已无法在正式版中运行,因此重写,标题叫1u1,也是遵守Sun的更新规范,代表update1,呵呵
文:西门町学士
*/
08年12月4日,Sun正式发布了JavaFX1.0。JavaFX在演进过程中发生了很多的变化,因此,我以前写的JavaFX的第一个HelloWorld的例子已经无法在正式版下运行,于是在这里重写那个例子。而新的API我也还没有开始学习,只好大略地浏览了一遍API就草草写就,因此,这个例子虽然在1.0版下正确运行,却未必就是最适合的写法,以后如发现问题再来update2吧,呵呵……
正式版中很多包的命名有了天翻地覆的变化,class的位置和名称很多也面目全非。比如GUI这块就经历了由javafx.ui变化成javafx.gui再变化成javafx.scene和javafx.application再进化成javafx.scene和javafx.stage,而跟Swing相关的组件也统统加上了Swing前缀。有的class我已经找不到了,比如以前的javafx.ui.MessageDialog,我在1.0中没有找到对应的class,只好直接叫用javax.swing.JOptionPane了。好了,废话不说了,贴新代码如下:

package sc.tmp;

import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.text.Text;
import javafx.scene.text.Font;
import javafx.ext.swing.SwingButton;
import javax.swing.JOptionPane;

/**
 * @author stevech
 */
Stage {
    title: "Application title"
    width: 250
    height: 80
    scene: Scene {
        fill: Color.ORANGE
        content: SwingButton {
            text: "Click..."
            action: function():Void {
                JOptionPane.showMessageDialog(null, "Have Fun!/nThis is your first JavaFX app!")
            }
            translateX: 90 translateY: 10
        }
    }
    visible: true
}
结果如图:


<think>好的,用户遇到了一个关于javafx-maven-plugin的问题,错误信息显示无法找到javafx-packager的依赖。首先,我需要分析错误的原因。用户使用的是com.zenjava:javafx-maven-plugin:8.8.3,这个版本可能已经过时了,而他们可能是在尝试打包JavaFX应用时遇到了依赖解析的问题。 错误信息中的关键点是“Could not find artifact javafx-packager:javafx-packager:jar:1.8.0_20 at specified path D:\software\jdk17/../lib/ant-javafx.jar”。这说明插件试图从JDK的lib目录下寻找ant-javafx.jar,但可能这个文件不存在或者路径不正确。这是因为从JDK 8之后,JavaFX已经不再包含在JDK中,所以用户可能使用了较新的JDK(比如JDK 17),而旧版插件仍然试图从旧路径查找,导致找不到依赖。 接下来,我需要考虑解决方案。首先,用户需要升级到更新的插件版本,比如org.openjfx的javafx-maven-plugin,因为zenjava的版本已经不再维护,并且不支持较新的JDK。然后,用户需要正确配置JavaFX的依赖,可能通过Maven依赖管理引入正确的模块,或者手动下载JavaFX SDK并设置路径。 另外,用户可能对JavaFX和JDK的关系不太清楚,需要解释为什么旧插件不适用,以及如何正确配置现代JavaFX项目。此外,用户可能在路径设置上有误,比如JDK安装目录的结构变化导致路径错误,需要指导他们检查路径是否正确,或者使用模块路径代替旧的依赖方式。 最后,确保用户了解如何修改pom.xml以使用新的插件,并正确设置mainClass和其他必要参数。可能还需要指导他们如何验证JavaFX SDK的安装,以及如何设置环境变量或插件配置中的sdkPath。</think>### **关键问题分析** 1. **插件版本与依赖冲突** - 你使用的是 `com.zenjava:javafx-maven-plugin:8.8.3`,这是一个 **已废弃的旧版插件**,专为 Java 8 和内置 JavaFX 的 JDK 设计。 - 错误提示 `javafx-packager:javafx-packager:jar:1.8.0_20` 表示插件试图从 **JDK 8 的 `lib/ant-javafx.jar`** 中查找依赖,但你的 JDK 是 17,路径 `D:\software\jdk17/../lib/ant-javafx.jar` 不存在。 2. **JavaFX 与 JDK 分离** - 从 JDK 11 开始,JavaFX **不再内置**于 JDK 中,需 **单独安装 JavaFX SDK** 或通过 Maven 依赖引入模块。 - `javafx-packager` 工具仅存在于 JDK 8(含 JavaFX)中,新版 JDK 和 JavaFX SDK 已移除该工具。 --- ### **修复步骤** #### 1. **更换为新版 `javafx-maven-plugin`** 使用官方维护的 `org.openjfx:javafx-maven-plugin`(支持 Java 11+ 和模块化 JavaFX): ```xml <plugin> <groupId>org.openjfx</groupId> <artifactId>javafx-maven-plugin</artifactId> <version>0.0.9</version> <!-- 或 0.1.0 --> <configuration> <mainClass>org.example.Main</mainClass> <!-- 替换为你的主类 --> </configuration> </plugin> ``` #### 2. **添加 JavaFX Maven 依赖** 在 `pom.xml` 中显式声明 JavaFX 模块依赖(如 `javafx-controls`): ```xml <dependencies> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-controls</artifactId> <version>17.0.2</version> <!--JavaFX SDK 版本一致 --> </dependency> <dependency> <groupId>org.openjfx</groupId> <artifactId>javafx-fxml</artifactId> <version>17.0.2</version> </dependency> </dependencies> ``` #### 3. **安装 JavaFX SDK** - 从 [GluonHQ 下载页面](https://gluonhq.com/products/javafx/) 下载对应操作系统的 JavaFX SDK(版本需与依赖一致,如 17.0.2)。 - 解压后设置环境变量 `PATH_TO_FX` 为 SDK 的 `lib` 目录: ```bash # Windows 示例 set PATH_TO_FX=C:\javafx-sdk-17.0.2\lib # macOS/Linux 示例 export PATH_TO_FX=/path/to/javafx-sdk-17.0.2/lib ``` #### 4. **配置插件的 `sdkPath`(可选)** 若不想设置环境变量,可在插件配置中直接指定 SDK 路径: ```xml <configuration> <sdkPath>C:\javafx-sdk-17.0.2</sdkPath> <!-- Windows --> <!-- <sdkPath>/path/to/javafx-sdk-17.0.2</sdkPath> macOS/Linux --> </configuration> ``` #### 5. **使用 `jlink` 或 `run` 构建/运行** - **运行项目**: ```bash mvn javafx:run ``` - **构建运行时镜像**: ```bash mvn javafx:jlink ``` --- ### **常见问题解决** | 问题类型 | 解决方案 | |------------------------|--------------------------------------------------------------------------| | 插件版本过旧 | 替换为 `org.openjfx:javafx-maven-plugin` | | 依赖未正确声明 | 添加 `javafx-controls` 和 `javafx-fxml` 等模块依赖 | | JavaFX SDK 未安装 | 下载并配置 SDK 路径(`PATH_TO_FX` 或 `sdkPath`) | | 环境变量路径错误 | 检查 `PATH_TO_FX` 是否指向 SDK 的 `lib` 目录 | | `jlink` 构建失败 | 确保插件配置中包含 `--add-modules`(如 `javafx.controls`) | --- ### **验证步骤** 1. **检查 JavaFX SDK 路径** ```bash echo %PATH_TO_FX% # Windows echo $PATH_TO_FX # macOS/Linux ``` 确保输出路径包含 `javafx-base.jar`, `javafx-controls.jar` 等文件。 2. **验证 Maven 依赖下载** ```bash mvn dependency:build-classpath ``` 确认输出中包含 `javafx-controls` 和 `javafx-fxml` 的路径。 3. **运行项目测试** ```bash mvn javafx:run ``` 若成功启动 JavaFX 窗口,说明配置正确。 --- ### **相关问题** 1. 如何下载并安装 JavaFX SDK? 2. `org.openjfx:javafx-maven-plugin` 与 `com.zenjava:javafx-maven-plugin` 有何区别? 3. 如何通过 Maven 依赖直接引入 JavaFX 模块? 4. `--add-modules` 参数在 `jlink` 中的作用是什么? 5. 如何修复 `No JavaFX runtime found` 错误?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值