Ich bin neu in JavaFX. Versuchen, einem Tutorial zu folgen, um eine Szene zu generieren und Eventhandler mit einer Schaltfläche zu verknüpfen.JavaFX: LoadException auf OnAction für Ereignishandler einer Schaltfläche auflösen
Ich habe eine Main.FXML erstellt und in SceneBuilder bearbeitet. Da ich den SceneBuilder-Pfad in meiner IDE hinzugefügt habe, kann er meinen Hauptcontroller erkennen. Ich habe eine Funktion geschrieben, um eine Zufallszahl zu generieren.
public class MainController {
public static void generateRandom(ActionEvent event) {
Random rand = new Random();
int myrand = rand.nextInt(500) + 1;
System.out.print(Integer.toString(myrand));
}
}
In scenebuilder, erkennt er diese Methode in der Steuerung, die leicht als Eventhandler für OnAction der Taste hinzugefügt werden kann. Main.FXML wird nach den Operationen aktualisiert.
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.AnchorPane?>
<AnchorPane prefHeight="300" prefWidth="500" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8.0.111" fx:controller="application.MainController">
<children>
<Button layoutX="204.0" layoutY="204.0" mnemonicParsing="false" onAction="#generateRandom" text="Button" />
<Label layoutX="138.0" layoutY="36.0" prefHeight="144.0" prefWidth="210.0" />
</children>
</AnchorPane>
Meine Hauptanwendungsklasse ist wie folgt:
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws IOException {
Parent root = FXMLLoader.load(getClass().getResource("/application/Main.fxml"));
Scene scene = new Scene(root,400,400);
scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
primaryStage.setTitle("My Title");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Wenn ich die app laufen, ich habe Fehler:
javafx.fxml.LoadException: Error resolving onAction='#generateRandom', either the event handler is not in the Namespace or there is an error in the script. /C:/Users/Oscar/Workspace/Sunoco/bin/application/Main.fxml:10
Error resolving “onAction” while loading FXML schlägt vor, es muss mit falschen Einfuhr tun kann ActionEvent
was nicht der Fall ist. Außerdem wird alles automatisch mit SceneBuilder und Eclipse eingerichtet. Warum bekomme ich diesen Fehler?
Sieht aus wie 'static' verursacht Problem. Nachdem ich es herausgenommen hatte, funktionierte es ohne '@ FXML' Annotation. – ddd