打开一个FXML文件

问题描述:

我试图用JavaFX Scene Builder打开我们项目的fxml文件,但出现错误。打开一个FXML文件

下面是一个例子文件:

<?xml version="1.0" encoding="UTF-8"?> 
<?import javafx.collections.FXCollections ?> 
<?import javafx.constants.*?> 
<?import javafx.scene.control.*?> 
<?import javafx.scene.layout.*?> 
<?import java.net.URL?> 
<ScrollPane xmlns:fx="http://javafx.com/fxml" 
      fx:controller="javafx.controller.main.kerNMainController" 
      fitToWidth="true" 
      fitToHeight="true"> 

    <GridPane styleClass="root" 
       alignment="CENTER_LEFT" 
       hgap="10" 
       vgap="20"> 
     <VBox alignment="CENTER"> 
      <Label text="%kerN.main.welcome.label.text" 
        GridPane.columnIndex="0" 
        GridPane.rowIndex="1" 
        GridPane.halignment="CENTER" 
        fx:id="welcomeLabel"/> 

      <Label fx:id="versionLabel" text="%kerN.main.version.label.text" styleClass="outerLabel"/> 
     </VBox> 

     <VBox alignment="BASELINE_CENTER" 
       spacing="40" 
       GridPane.columnIndex="0" 
       GridPane.rowIndex="2" 
       minHeight="550" 
       minWidth="550"> 
      <Button fx:id="assignedTestsAvailableButton" 
        text="%kerN.main.assigned.tests.available.btn.text" 
        onAction="#handleAssignedTestsAvailable" 
        styleClass="assignedTestsButton"> 
       <minWidth> 
        <Constants fx:constant="LARGE_BUTTON_WIDTH"/> 
       </minWidth> 
       <minHeight> 
        <Constants fx:constant="DOUBLE_BUTTON_HEIGHT"/> 
       </minHeight> 
      </Button> 
      <Button fx:id="configurationButton" 
        text="%kerN.main.configuration.btn.text" 
        styleClass="configurationButton" 
        onAction="#handleConfiguration"> 
       <minWidth> 
        <Constants fx:constant="LARGE_BUTTON_WIDTH"/> 
       </minWidth> 
       <minHeight> 
        <Constants fx:constant="DOUBLE_BUTTON_HEIGHT"/> 
       </minHeight> 
      </Button> 
      <Button fx:id="maintenanceButton" 
        text="%kerN.main.maintenance.btn.text" 
        styleClass="maintenanceButton" 
        onAction="#handleMaintenance"> 
       <minWidth> 
        <Constants fx:constant="LARGE_BUTTON_WIDTH"/> 
       </minWidth> 
       <minHeight> 
        <Constants fx:constant="DOUBLE_BUTTON_HEIGHT"/> 
       </minHeight> 
      </Button> 
      <Button fx:id="editTestDataButton" 
        text="%kerN.main.edit.test.data.button.text" 
        onAction="#handleEditTestData" 
        styleClass="editTestDataButton"> 
       <minWidth> 
        <Constants fx:constant="LARGE_BUTTON_WIDTH"/> 
       </minWidth> 
       <minHeight> 
        <Constants fx:constant="DOUBLE_BUTTON_HEIGHT"/> 
       </minHeight> 
      </Button> 
      <Button fx:id="testProcessButton" 
        text="%test.process.button.text" 
        onAction="#handleTestProcess" 
        styleClass="testProcessButton"> 
       <minWidth> 
        <Constants fx:constant="LARGE_BUTTON_WIDTH"/> 
       </minWidth> 
       <minHeight> 
        <Constants fx:constant="DOUBLE_BUTTON_HEIGHT"/> 
       </minHeight> 
      </Button> 
     </VBox> 
    </GridPane> 

    <stylesheets> 
     <URL value="@../../style/general/Buttons.css"/> 
     <URL value="@../../style/main/kerNMain.css"/> 
    </stylesheets> 
</ScrollPane> 

从场景生成器获取此错误Im为

java.io.IOException: javafx.fxml.LoadException: Invalid attribute. 
/C:/Users/User/workspace/kerN/src/javafx/frame/main/kerNMain.fxml:37 

    at com.oracle.javafx.scenebuilder.kit.fxom.FXOMLoader.load(FXOMLoader.java:92) 
    at com.oracle.javafx.scenebuilder.kit.fxom.FXOMDocument.<init>(FXOMDocument.java:80) 
    at com.oracle.javafx.scenebuilder.kit.fxom.FXOMDocument.<init>(FXOMDocument.java:95) 
    at com.oracle.javafx.scenebuilder.kit.editor.EditorController.updateFxomDocument(EditorController.java:2370) 
    at com.oracle.javafx.scenebuilder.kit.editor.EditorController.setFxmlTextAndLocation(EditorController.java:655) 
    at com.oracle.javafx.scenebuilder.app.DocumentWindowController.loadFromFile(DocumentWindowController.java:386) 
    at com.oracle.javafx.scenebuilder.app.SceneBuilderApp.performOpenFiles(SceneBuilderApp.java:579) 
    at com.oracle.javafx.scenebuilder.app.SceneBuilderApp.handleOpenFilesAction(SceneBuilderApp.java:447) 
    at com.oracle.javafx.scenebuilder.app.SceneBuilderApp.handleLaunch(SceneBuilderApp.java:427) 
    at com.oracle.javafx.scenebuilder.app.AppPlatform.requestStartGeneric(AppPlatform.java:139) 
    at com.oracle.javafx.scenebuilder.app.AppPlatform.requestStart(AppPlatform.java:106) 
    at com.oracle.javafx.scenebuilder.app.SceneBuilderApp.start(SceneBuilderApp.java:371) 
    at com.sun.javafx.application.LauncherImpl$8.run(LauncherImpl.java:837) 
    at com.sun.javafx.application.PlatformImpl$7.run(PlatformImpl.java:335) 
    at com.sun.javafx.application.PlatformImpl$6$1.run(PlatformImpl.java:301) 
    at com.sun.javafx.application.PlatformImpl$6$1.run(PlatformImpl.java:298) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at com.sun.javafx.application.PlatformImpl$6.run(PlatformImpl.java:298) 
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95) 
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
    at com.sun.glass.ui.win.WinApplication.access$300(WinApplication.java:39) 
    at com.sun.glass.ui.win.WinApplication$4$1.run(WinApplication.java:112) 
    at java.lang.Thread.run(Thread.java:744) 
Caused by: javafx.fxml.LoadException: Invalid attribute. 
/C:/Users/User/workspace/kerN/src/javafx/frame/main/kerNMain.fxml:37 

    at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2613) 
    at javafx.fxml.FXMLLoader.access$100(FXMLLoader.java:104) 
    at javafx.fxml.FXMLLoader$ValueElement.processAttribute(FXMLLoader.java:943) 
    at javafx.fxml.FXMLLoader$Element.processStartElement(FXMLLoader.java:216) 
    at javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:738) 
    at javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2723) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2527) 
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2425) 
    at com.oracle.javafx.scenebuilder.kit.fxom.FXOMLoader.load(FXOMLoader.java:89) 
    ... 22 more 

的FXML文件手动和theywork创建应用程序,但不能在打开场景生成器,其中没有一个......是否有这种或另一种fxml构建器的解决方案?

线:37 <Constants fx:constant="LARGE_BUTTON_WIDTH"/>

+0

你能确认这是你的kerNMail.fxml的37行?我不认为有一个名为'javafx.constants'的包,可能是问题。 – 2014-11-05 15:07:43

+0

@James_D对不起,我更新了第37行的问题: '' – Anarkie 2014-11-05 15:15:17

+0

该行引用一个名为'Constants'的类。在你导入的任何包中都没有这样的类(并且根本没有'javafx.constants'包)。我想这就是为什么你会收到错误。如果你定义了一个'Constants'类,你需要为它提供正确的导入。 – 2014-11-05 16:12:47

this指导,它应该是:

<Button fx:id="assignedTestsAvailableButton" 
     text="%kerN.main.assigned.tests.available.btn.text" 
     onAction="#handleAssignedTestsAvailable" 
     styleClass="assignedTestsButton"> 
    <minWidth> 
     <Double fx:constant="LARGE_BUTTON_WIDTH"/> <!-- change here --> 
    </minWidth> 
    <minHeight> 
     <Double fx:constant="DOUBLE_BUTTON_HEIGHT"/> <!-- change here --> 
    </minHeight> 
</Button> 
+0

在同一条线上的错误仍然存​​在。 – Anarkie 2014-11-06 12:18:22

+0

我无法重新创建问题。为此,缺少太多的代码。也许你可以创建一个MWE? – Turing85 2014-11-06 13:18:01