JavaFX与IntelliJ启动报错:java.lang.module.InvalidModuleDescriptorException
JavaFX模块初始化错误排查
问题描述
我通过IntelliJ提供的JavaFX项目模板创建了一个测试项目,仅用于展示Scene Builder制作的带折线图的GUI,代码简洁且我认为无误。此外,我无法在IntelliJ中查看.class文件。启动项目时出现以下错误:
错误信息
Error occurred during initialization of boot layer java.lang.module.FindException: Error reading module: C:\Users\pv3\Desktop\PruebasFX_OracleFXProyectInicio\target\classes Caused by: java.lang.module.InvalidModuleDescriptorException: GraficasVentPrueba1.class found in top-level directory (unnamed package not allowed in module) Process finished with exit code 1
项目代码
import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.scene.Scene; import javafx.stage.Stage; import java.io.IOException; public class GraficasVentPrueba1 extends Application { @Override public void start(Stage stage) throws IOException{ FXMLLoader launcherGraficas = new FXMLLoader(GraficasVentPrueba1.class.getResource("GraficasVentPrueba1.fxml")); Scene emergenteGraficas = new Scene(launcherGraficas.load()); stage.setScene(emergenteGraficas); stage.show(); } public static void main(String[] args) { launch(args); } }
解决方案
- 核心问题:你的类
GraficasVentPrueba1处于未命名包(顶级目录),而Java模块系统禁止模块中存在顶级目录下的类。 - 步骤1:给类添加包声明,在所有import语句上方添加类似
package com.myfx.app;的代码(包名可自定义)。 - 步骤2:将
.java文件移动到与包名对应的目录结构中,比如包名为com.myfx.app,则文件路径应为src/main/java/com/myfx/app/GraficasVentPrueba1.java。 - 步骤3:调整FXML文件的位置和加载路径:将FXML文件放到对应资源目录(如
src/main/resources/com/myfx/app/),加载时可使用绝对路径/com/myfx/app/GraficasVentPrueba1.fxml,或保持相对路径(此时类和FXML在同一包路径下)。 - 关于无法查看.class文件:在IntelliJ中,可通过
Project面板切换到Project视图,展开target/classes目录即可看到编译后的.class文件。
内容的提问来源于stack exchange,提问作者Eri Leonette
相关产品推荐
相关产品推荐

