JavaFX 的新功能并卡住了

New with JavaFX and stuck

我正在学习 Java(FX),但现在,我无能为力了。我有一个我不明白的错误。它应该绘制矩形。

错误:

Exception in Application start method
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:363)
at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:303)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)
Caused by: 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$launchApplication7(LauncherImpl.java:157)
at com.sun.javafx.application.LauncherImpl$$Lambda/815033865.run(Unknown Source)
at java.lang.Thread.run(Thread.java:745)
Caused by: javafx.fxml.LoadException: 
at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2595)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2573)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2435)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3208)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3169)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3142)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3118)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3098)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3091)
at cihly.Cihly.start(Cihly.java:22)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication13(LauncherImpl.java:821)
at com.sun.javafx.application.LauncherImpl$$Lambda/84796442.run(Unknown Source)
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait6(PlatformImpl.java:323)
at com.sun.javafx.application.PlatformImpl$$Lambda/584634336.run(Unknown Source)
at com.sun.javafx.application.PlatformImpl.lambda$null4(PlatformImpl.java:292)
at com.sun.javafx.application.PlatformImpl$$Lambda/873652227.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater5(PlatformImpl.java:291)
at com.sun.javafx.application.PlatformImpl$$Lambda/501263526.run(Unknown Source)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at 

我该怎么办?

编辑:

这是我的代码:

Class1:

public class VyplnObrazovku {

private int zakladna;
private int sirkaCihly;
private int vyskaCihly;
private int sirkaProgramu = 600;
private int vyska;
Canvas canvas = new Canvas(600, 330);;
private GraphicsContext gc = canvas.getGraphicsContext2D();



private void nakresliCihlu(int x, int y, int vyska, int sirka) {

    gc.setFill(Color.BLACK);
    gc.fillRoundRect(x,y,sirka,vyska,5,5);
    gc.setFill(Color.RED);
    gc.fillRect(x+5, x+5, sirka-5, vyska-5);
}


public void rozmery(int vyska){
    this.zakladna = vyska;
    this.sirkaCihly = sirkaProgramu - 10 / zakladna;
    this.vyskaCihly = sirkaCihly / 2;
    this.vyska = vyska;
}

public void vypln(){
    int odecist = 0;
    int x = 5;
    int y = 5;
    for(int i = 0; i < vyska; i++){
        for(int j = 0; j < zakladna - odecist; j++){
            nakresliCihlu(x, y, this.vyskaCihly, this.sirkaCihly);
            x += sirkaCihly;
        }
        y += vyskaCihly;
        x = (int) (5 + (i*0.5));
        odecist++;
    }
}

private void drawShapes(GraphicsContext gc) {
    throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
}


}

主要Class:

public class Cihly extends Application {

@Override
public void start(Stage stage) throws Exception {
    Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));
    Scene scene = new Scene(root);
    stage.setScene(scene);
    stage.setResizable(false);
    stage.show();
}

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

控制器:

public class FXMLDocumentController implements Initializable {

@FXML
private Label labelCislo;

@FXML
private void handleButtonAction(ActionEvent event) {

}

@Override
public void initialize(URL url, ResourceBundle rb) {
    VyplnObrazovku plnic = new VyplnObrazovku();
    plnic.rozmery(5);
    plnic.vypln();
}    
}

编辑 2:

我正在检查 FXMLDocument.fxml,但我找不到任何错误。我将不胜感激每一个建议。 FXMLDocument.fxml

<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.canvas.*?>
<?import javafx.scene.shape.*?>
<?import java.lang.*?>
<?import java.util.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>

<AnchorPane id="AnchorPane" prefHeight="320.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="cihly.FXMLDocumentController">
   <children>
      <Canvas height="330.0" layoutY="34.0" width="600.0" />
      <HBox layoutX="2.0" layoutY="6.0" prefHeight="38.0" prefWidth="600.0">
         <children>
            <Label prefHeight="14.0" prefWidth="199.0" text="Zadejte výšku zdi v rozmezí 1 až 500:" />
            <TextField fx:id="labelCislo" />
            <Button fx:id="handleButtonAction" mnemonicParsing="false" text="OK" />
         </children>
      </HBox>
   </children>
</AnchorPane>

问题是,在 fxml 文件中,您使用 fx:id = labelCislo 定义了 TextField,但在控制器 class 中,您试图将此 fx:id 变量注入为 Label。所以 FXMLLoader 无法将标签转换为文本字段。如果您发布完整的异常错误文本,它对我们来说会更具描述性。但是你截断了它...