2016-02-06 2 views
0

testFX.java:JavaFX FXML chargeur ne fonctionne pas correctement

public class testFX extends Application { 
    @Override 
    public void start(Stage primaryStage) throws Exception { 
     try{ 
      FXMLLoader loader = new FXMLLoader(); 
      loader.setLocation(getClass().getResource("/testFX/view/test.fxml")); 
      System.out.println("after set location"); 
      //PROBLEM 
      AnchorPane root = (AnchorPane)loader.load(); 
      System.out.println("Does not happen"); 
      testFXController listController = loader.getController(); 
      listController.start(); 
      Scene scene = new Scene(root, 200, 300); 
      scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm()); 
      primaryStage.setScene(scene); 
      primaryStage.show(); 
     } 
     catch (Exception ex){ 
      System.out.println("Error"); 
     } 
    } 

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

testFXController.java:

package testFX.view; 

import javafx.collections.FXCollections; 
import javafx.collections.ObservableList; 
import javafx.fxml.FXML; 
import javafx.scene.control.ListView; 

public class testFXController { 
    @FXML ListView<String> listView; 
    private ObservableList<String> obsList; 

    public void start() { 
     // create an ObservableList 
     // from an ArrayList 
     obsList = FXCollections.observableArrayList("Giants", "Patriots", "Jaguars"); 
     listView.setItems(obsList); 
    } 
} 

test.fxml:

<?xml version="1.0" encoding="UTF-8"?> 
<?import javafx.scene.layout.AnchorPane?> 
<?import javafx.scene.control.ListView?> 
<AnchorPane xmlns="http://javafx.com/javafx/8.0.40" xmlns:fx="http://javafx.com/fxml/1" 
    fx:controller="view.testFXController"> 
    <ListView fx:id="listView" 
     AnchorPane.topAnchor="10" 
     AnchorPane.leftAnchor="10" 
     AnchorPane.rightAnchor="10" 
     AnchorPane.bottomAnchor="10" /> 
</AnchorPane> 

Quand je lance le testFX.java , le système imprime:

after set location 
Error 

C'est le code du professeur et je n'arrive pas à le faire fonctionner. Je me suis rendu compte que le problème principal est dans la ligne de code AnchorPane root = (AnchorPane)loader.load(); mais je n'ai aucune idée comment résoudre ce problème, quelqu'un peut-il aider?

+1

Afficher la totalité de la trace de la pile au lieu d'imprimer le message "Erreur" –

+0

Veuillez remplacer 'System.out.println (" Erreur ");' par 'e.printStackTrace()'. Ensuite, exécutez le programme à nouveau et dites-nous la sortie. – slartidan

Répondre

0

La valeur fx:controller attribut est erroné le plus probable (sauf si vous avez une autre classe de contrôleur que celui affiché)

Le contrôleur que vous souhaitez utiliser: testFX.view.testFXController

Valeur d'attribut dans le FXML: view.testFXController = testFX.view.testFXController

En supposant qu'il n'existe aucune autre erreur qui ne peut pas être reproduite avec les informations de la question, la fixation de la valeur d'attribut devrait fonctionner.

+0

MERCI !!!!! C'était le problème. – Shaun