2015-06-08 14 views
1

我正在構建使用JavaFx和場景生成器的應用程序,但是除了添加Controller類時,一切正常。添加控制器類時的Javafx程序錯誤

我得到以下錯誤:

Exception in Application start method Exception in thread "main" java.lang.RuntimeException: Exception in Application start method at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:875) at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$147(LauncherImpl.java:157) at com.sun.javafx.application.LauncherImpl$$Lambda$1/868693306.run(Unknown Source) at java.lang.Thread.run(Thread.java:745) Caused by: javafx.fxml.LoadException: /C:/Users/M%20ROSE/Documents/Info%20Trivia/out/production/Info%20Trivia/sample/gameScene1.fxml:15

然而此刻我刪除了FX:從該行控制器屬性在我FXML代碼它完美的作品。

<BorderPane maxHeight="450.0" maxWidth="800.0" minHeight="450.0" minWidth="800.0" prefHeight="400.0" prefWidth="800.0" styleClass="questionInstance" stylesheets="@style.css" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Controller"> 

下面是有關代碼

控制器類

package sample; 

import javafx.scene.Scene; 
import javafx.scene.image.Image; 
import javafx.scene.image.ImageView; 
import javafx.scene.shape.* ; 
import javafx.geometry.* ; 
import javafx.scene.text.* ; 
import javafx.scene.image.* ; 
import javafx.scene.control.* ; 
import java.lang.* ; 
import javafx.scene.layout.* ; 
import javafx.geometry.Insets ; 
import javafx.scene.layout.GridPane ; 
import javafx.scene.control.Button ; 
import javafx.scene.control.Label ; 

public class Controller { 

    //Initialize fxml controls 
    public Button trueButton; 
    public Button falseButton; 
    public Label playerLabel; 
    public Label questionLabel; 
    public Label scoreValue; 
    public ImageView questionImage; 
    public Rectangle redBar; 
    public Rectangle greenBar; 


    //Create array for level 1 questions 

    String[][] levelOneData = { 
     {"This is a Sequence Diagram","f", null}, 
     {"This diagram is for a database","t", null}, 
     {"This is a rack diagram","t", null}, 
     {"This is a flow chart","f", null}, 
     {"This is a kind of UML diagram","t", null} 
    }; 
    Image[] levelOneImages = new Image[] { 
      new Image("res/images/l1q1.png"), 
      new Image("res/images/l1q2.png"), 
      new Image("res/images/l1q3.png"), 
      new Image("res/images/l1q4.png"), 
      new Image("res/images/l1q5.png") 
    }; 


    public void levelOneInitializer(){ 
     questionLabel.setText(levelOneData[0][0]); 
     questionImage.setImage(levelOneImages[0]); 
     System.out.println("done"); 

    } 
} 

主類

package sample; 

import javafx.application.Application; 
import javafx.fxml.FXMLLoader; 
import javafx.scene.Parent; 
import javafx.scene.Scene; 
import javafx.stage.Stage; 

public class Main extends Application { 

    @Override 
    public void start(Stage primaryStage) throws Exception{ 
     Parent root = FXMLLoader.load(getClass().getResource("gameScene1.fxml")); 
     primaryStage.setTitle("Info Trivia"); 
     primaryStage.setScene(new Scene(root, 800, 450)); 
     primaryStage.setResizable(false); 
     primaryStage.show(); 
    } 


    public static void main(String[] args) { 
     launch(args); 
    } 
} 

gameScene1.fxml

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

<?import javafx.scene.shape.*?> 
<?import javafx.geometry.*?> 
<?import javafx.scene.text.*?> 
<?import javafx.scene.image.*?> 
<?import javafx.scene.control.*?> 
<?import java.lang.*?> 
<?import javafx.scene.layout.*?> 
<?import javafx.geometry.Insets?> 
<?import javafx.scene.layout.GridPane?> 
<?import javafx.scene.control.Button?> 
<?import javafx.scene.control.Label?> 

<BorderPane maxHeight="450.0" maxWidth="800.0" minHeight="450.0" minWidth="800.0" prefHeight="400.0" prefWidth="800.0" styleClass="questionInstance" stylesheets="@style.css" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Controller"> 
    <top> 
     <HBox styleClass="questheader" BorderPane.alignment="CENTER"> 
     <children> 
      <ImageView pickOnBounds="true" preserveRatio="true"> 
       <image> 
        <Image url="@res/images/userICon.png" /> 
       </image> 
      </ImageView> 
      <Label id="playerName" fx:id="playerLabel" text="Player 1" textFill="#a2c2b1"> 
       <font> 
        <Font name="Arial" size="24.0" /> 
       </font> 
      </Label> 
      <Region prefHeight="0.0" prefWidth="382.0" /> 
      <Label id="ScoreLabel" layoutX="40.0" layoutY="10.0" text="Score: " textFill="#a2c2b1"> 
       <font> 
        <Font name="Arial" size="24.0" /> 
       </font> 
      </Label> 
      <Label id="scoreValue" fx:id="scoreValue" layoutX="129.0" layoutY="10.0" text="0" textFill="#a2c2b1"> 
       <font> 
        <Font name="Arial" size="24.0" /> 
       </font> 
      </Label> 
     </children> 
     <BorderPane.margin> 
      <Insets left="50.0" right="50.0" /> 
     </BorderPane.margin> 
     <padding> 
      <Insets bottom="10.0" left="15.0" right="15.0" top="10.0" /> 
     </padding> 
     </HBox> 
    </top> 
    <left> 
     <StackPane prefHeight="150.0" prefWidth="200.0" BorderPane.alignment="CENTER"> 
     <BorderPane.margin> 
      <Insets left="50.0" /> 
     </BorderPane.margin> 
     <children> 
      <ImageView fx:id="questionImage" pickOnBounds="true" preserveRatio="true"> 
       <image> 
        <Image url="@res/images/blankimage.png" /> 
       </image> 
       <StackPane.margin> 
        <Insets left="35.0" /> 
       </StackPane.margin> 
      </ImageView> 
     </children> 
     </StackPane> 
    </left> 
    <bottom> 
     <HBox BorderPane.alignment="CENTER"> 
     <children> 
      <Rectangle fx:id="greenBar" arcHeight="5.0" arcWidth="5.0" fill="#34b316" height="28.0" stroke="BLACK" strokeType="INSIDE" strokeWidth="0.0" width="10.0" /> 
      <Rectangle fx:id="redBar" arcHeight="5.0" arcWidth="5.0" fill="#a93535" height="28.0" stroke="BLACK" strokeType="INSIDE" strokeWidth="0.0" width="620.0" /> 

     </children> 
     <padding> 
      <Insets bottom="40.0" left="85.0" right="85.0" /> 
     </padding> 
     </HBox> 
    </bottom> 
    <center> 
     <BorderPane prefHeight="200.0" prefWidth="200.0" BorderPane.alignment="CENTER"> 
     <BorderPane.margin> 
      <Insets right="85.0" /> 
     </BorderPane.margin> 
     <top> 
      <StackPane prefHeight="150.0" prefWidth="200.0" BorderPane.alignment="CENTER"> 
       <children> 
        <Label fx:id="questionLabel" text="This Is a Question" textFill="#191919"> 
        <font> 
         <Font name="Arial" size="24.0" /> 
        </font> 
        </Label> 
       </children> 
      </StackPane> 
     </top> 
     <center> 
      <HBox prefHeight="100.0" prefWidth="200.0" BorderPane.alignment="CENTER"> 
       <children> 
        <Button fx:id="trueButton" mnemonicParsing="false" prefWidth="100.0" text="True"> 
        <HBox.margin> 
         <Insets /> 
        </HBox.margin> 
        </Button> 
        <Region prefWidth="200.0" /> 
        <Button fx:id="falseButton" mnemonicParsing="false" prefWidth="100.0" text="False" /> 
       </children> 
       <BorderPane.margin> 
        <Insets /> 
       </BorderPane.margin> 
       <padding> 
        <Insets left="20.0" top="20.0" /> 
       </padding> 
      </HBox> 
     </center> 
     </BorderPane> 
    </center> 
</BorderPane> 
+0

我認爲你需要仔細檢查你的FXML指定的控制器類的名稱,並確保它匹配班級的實際名稱。它看起來像你指定sample.Controller和你的類名稱是控制器。他們需要匹配。另外,'。'在名義上是不是一個好主意。 :) – RonSiven

+0

謝謝@RonSiven。我終於完成了它的工作,但它不是因爲控制器名稱。看來我在控制器類中創建的數組正在導致它。一旦我評論他們,它的工作。但是我迷失在我現在能夠創建這些陣列的方式上。 –

+0

如果你解決了問題,請添加答案並接受它(否則這將被標記爲未答覆) – prasadmadanayake

回答

0

您控制器必須實現Initializable,具有以下嘗試:

public class Controller implement Initializable{ 

    //Initialize fxml controls 
    @FXML 
    public Button trueButton; 
    @FXML 
    public Button falseButton; 
    @FXML 
    public Label playerLabel; 
    @FXML 
    public Label questionLabel; 
    @FXML 
    public Label scoreValue; 
    @FXML 
    public ImageView questionImage; 
    @FXML 
    public Rectangle redBar; 
    @FXML 
    public Rectangle greenBar; 


    //Create array for level 1 questions 

    String[][] levelOneData = { 
     {"This is a Sequence Diagram","f", null}, 
     {"This diagram is for a database","t", null}, 
     {"This is a rack diagram","t", null}, 
     {"This is a flow chart","f", null}, 
     {"This is a kind of UML diagram","t", null} 
    }; 
    Image[] levelOneImages = new Image[] { 
      new Image("res/images/l1q1.png"), 
      new Image("res/images/l1q2.png"), 
      new Image("res/images/l1q3.png"), 
      new Image("res/images/l1q4.png"), 
      new Image("res/images/l1q5.png") 
    }; 


    public void levelOneInitializer(){ 
     questionLabel.setText(levelOneData[0][0]); 
     questionImage.setImage(levelOneImages[0]); 
     System.out.println("done"); 

    } 
}