You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaFX运行报错:FXML加载失败,缺失Gluon控件依赖

JavaFX执行时无法加载Scene Builder创建的FXML,报ClassNotFoundException: com.gluonhq.charm.glisten.control.Avatar

问题根源

报错核心是JVM找不到com.gluonhq.charm.glisten.control.Avatar类,原因是你在FXML中使用了Gluon Charm Glisten框架的自定义控件(Avatar、BottomNavigationButton),但这些控件不属于JavaFX标准库,项目未引入对应依赖。

报错信息

javafx.fxml.LoadException: 
/C:/Users/DELL/eclipse-workspace/RiadFxProject/bin/application/RiadFxml.fxml

    at javafx.fxml/javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2714)
    at javafx.fxml/javafx.fxml.FXMLLoader.importClass(FXMLLoader.java:2986)
    at javafx.fxml/javafx.fxml.FXMLLoader.processImport(FXMLLoader.java:2830)
    at javafx.fxml/javafx.fxml.FXMLLoader.processProcessingInstruction(FXMLLoader.java:2765)
    at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2631)
    at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2555)
    at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3368)
    at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3324)
    at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3292)
    at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3264)
    at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3240)
    at javafx.fxml/javafx.fxml.FXMLLoader.load(FXMLLoader.java:3233)
    at RiadFxProject/application.Main.start(Main.java:24)
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:847)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:484)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:457)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:456)
    at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
    at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:184)
    at java.base/java.lang.Thread.run(Thread.java:1589)
Caused by: java.lang.ClassNotFoundException: com.gluonhq.charm.glisten.control.Avatar
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    at javafx.fxml/javafx.fxml.FXMLLoader.loadTypeForPackage(FXMLLoader.java:3054)
    at javafx.fxml/javafx.fxml.FXMLLoader.loadType(FXMLLoader.java:3043)
    at javafx.fxml/javafx.fxml.FXMLLoader.importClass(FXMLLoader.java:2984)
    ... 20 more

涉及代码

Main.java:

package application;
    
import javafx.scene.text.*;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Group;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.layout.AnchorPane;
import javafx.scene.paint.Color;
import javafx.scene.text.Text;
import javafx.stage.Stage;
public class Main extends Application {

    public static void main(String []args)
    {
        launch(args);
    }
    @Override
    public void start(Stage stage) throws Exception {
        try {
        AnchorPane root = (AnchorPane) FXMLLoader.load(Main.class.getResource("/application/RiadFxml.fxml"));
        Scene scene=new Scene(root,400,400);    
        
        stage.setScene(scene);  
        stage.show();
        }catch(Exception e)
        {
            e.printStackTrace();
        }
        
    }
}

RiadFxml.fxml:

<?xml version="1.0" encoding="UTF-8"?>

<?import com.gluonhq.charm.glisten.control.Avatar?>
<?import com.gluonhq.charm.glisten.control.BottomNavigationButton?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.shape.Arc?>

<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/21" xmlns:fx="http://javafx.com/fxml/1" fx:controller=".FXMLController">
   <children>
      <Avatar layoutX="47.0" layoutY="52.0" />
      <BottomNavigationButton layoutX="397.0" layoutY="39.0" />
      <Arc fill="DODGERBLUE" layoutX="126.0" layoutY="200.0" length="270.0" radiusX="100.0" radiusY="100.0" startAngle="45.0" stroke="BLACK" strokeType="INSIDE" type="ROUND" />
      <Button layoutX="222.0" layoutY="188.0" mnemonicParsing="false" text="Button" />
      <Button layoutX="353.0" layoutY="188.0" mnemonicParsing="false" text="Button" />
   </children>
</AnchorPane>

解决步骤

1. 引入Gluon Charm Glisten依赖

根据项目构建工具选择对应方式:

  • Maven:在pom.xml中添加依赖
    <dependency>
        <groupId>com.gluonhq</groupId>
        <artifactId>charm-glisten</artifactId>
        <version>6.2.0</version> <!-- 使用最新稳定版本 -->
    </dependency>
    
  • Gradle:在build.gradle中添加依赖
    implementation 'com.gluonhq:charm-glisten:6.2.0'
    
  • 手动导入Jar:下载Charm Glisten的jar包,添加到Eclipse项目的Build Path(右键项目 → Build Path → Add External Archives)。

2. 修复FXML控制器路径

FXML中fx:controller=".FXMLController"的写法存在路径歧义,若控制器类在application包下,建议改为完整路径:

fx:controller="application.FXMLController"

确保控制器类存在且路径正确。

3. 验证资源路径

确认RiadFxml.fxml文件的位置:

  • 普通Eclipse项目:放在src/application目录下;
  • Maven项目:放在src/main/resources/application目录下。
    Main.class.getResource("/application/RiadFxml.fxml")的路径写法正确,无需修改。

内容的提问来源于stack exchange,提问作者Riad Xploz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 04:34:55