2017-03-01 3 views
0

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?

Antwort

2

Ich denke, das Problem wird gelöst, wenn Sie eine @FXML Annotation auf der eventMethod verwenden. Versuchen Sie außerdem, keine Methoden im Controller statisch zu machen, da dies verwirrend/irreführend sein kann. Wenn Sie benötigen, dass diese Methode von woanders aus zugänglich ist, sollten Sie sie in einer separaten (Utility like) Klasse deklarieren.

+0

Sieht aus wie 'static' verursacht Problem. Nachdem ich es herausgenommen hatte, funktionierte es ohne '@ FXML' Annotation. – ddd

Verwandte Themen