有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java FXMLLoader找不到JavaFX类,但可以手动创建JavaFX

我正在使用Java、JavaFX和Gradle进行IntelliJ插件项目

我可以通过编程成功地创建JavaFX元素。如果我尝试使用fxml文件和FXMLLoader,插件会因为javafx而失败。fxml。LoadException:JavaFX类不是有效的类型错误。我怀疑这是gradle的一个简单的依赖性问题,但在这一点上我是在兜圈子。所以我的主要问题是,为什么以编程方式构建JavaFX类可以工作,而使用FXMLLoader却不能

如果需要更多的信息,我很乐意与大家分享——请告诉我。以下是我认为相关的内容。谢谢你的帮助

异常消息:

javafx.fxml.LoadException: HBox is not a valid type.
file:/D:/Projects/IU-P532-Assignments/FinalProject-Team3/build/idea-sandbox/plugins/p532.fall21.finalproject.team3/lib/p532.fall21.finalproject.team3-1.0-SNAPSHOT.jar!/HeatMapScene.fxml

    at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2621)
    at javafx.fxml.FXMLLoader.createElement(FXMLLoader.java:2789)
    at javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2719)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2552)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2466)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3237)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3194)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3163)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3136)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3113)
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3106)
    at intellij_extension.TestToolWindowFactory.lambda$createToolWindowContent$0(TestToolWindowFactory.java:32)
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:427)
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:174)
    at java.base/java.lang.Thread.run(Thread.java:829)

下面是一段代码:

        //Load in the XML of the test window
        // This throws exception
        Parent playRoot = FXMLLoader.load(getClass().getClassLoader().getResource("HeatMapScene.fxml"));

        // This will work properly
        Parent playRoot = new HBox();

以下是fxml文件:

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


<?import javafx.scene.layout.FlowPane?>
<?import javafx.scene.layout.HBox?>
<HBox id="hboxHeatMapSceneRoot" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity"
      prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
    <children>
        <FlowPane id="flowPnHeatFileContainer" prefHeight="400.0" prefWidth="420.0"/>
    </children>
</HBox>

这是我的身材。渐变文件:

plugins {
    id 'java'
    id 'org.openjfx.javafxplugin' version '0.0.7'
    id 'org.jetbrains.intellij' version '1.2.1'
}

group 'p532.fall21.finalproject.team3'
version '1.0-SNAPSHOT'

sourceCompatibility = 11

repositories {
    mavenCentral()
}

dependencies {
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'
}

// See https://github.com/JetBrains/gradle-intellij-plugin/
intellij {
    version = '2021.2.3'
}

runIde {
    jvmArgs = [
            '--add-exports',
            'java.base/jdk.internal.vm=ALL-UNNAMED'
    ]
}

patchPluginXml {
    changeNotes = """
      Add change notes here.<br>
      <em>most HTML tags may be used</em>"""
}
test {
    useJUnitPlatform()
}

javafx {
    modules = ['javafx.controls', 'javafx.fxml']
    version = '11.0.2'
}



共 (0) 个答案