2017-02-20 1 views
0

Je suis ce cours sur PluralSite et je copie le code de bout en bout mais il utilise netbeans et j'utilise eclipse et je n'arrive pas à comprendre ce qui se passe . Y at-il une différence lors de l'utilisation de netbeans et ecplise pour utiliser un fichier fxml? J'apprécierais si quelqu'un peut aider. Si vous avez besoin de plus d'informations, n'hésitez pas à demander. Je suis nouveau à javafx alors sois gentil. Le fichier FXML est dans le même paquet que les autres:Le fichier FXML empêche l'application de s'ouvrir

est l'exception ici que je reçois, suivi du code d'application, puis le code FXML

Exception in Application start method 
java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:389) 
    at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at sun.launcher.LauncherHelper$FXHelper.main(Unknown Source) 
Caused by: java.lang.RuntimeException: Exception in Application start method 
    at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917) 
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$155(LauncherImpl.java:182) 
    at java.lang.Thread.run(Unknown Source) 
Caused by: java.lang.NullPointerException: Location is required. 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3207) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3175) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3148) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3124) 
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3104) 
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3097) 
    at application.SimpleUI.start(SimpleUI.java:18) 
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863) 
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326) 
    at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294) 
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95) 
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
    at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191) 
    ... 1 more 
Exception running application application.SimpleUI 





    //first is my app 
    package application; 

    import java.io.IOException; 

    import javafx.application.Application; 
    import javafx.fxml.FXMLLoader; 
    import javafx.scene.Scene; 
    import javafx.scene.control.Button; 
    import javafx.scene.control.Label; 
    import javafx.scene.control.TextField; 
    import javafx.scene.layout.HBox; 
    import javafx.scene.layout.VBox; 
    import javafx.stage.Stage; 

    public class SimpleUI extends Application { 
     @Override 
     public void start(Stage primaryStage) throws Exception { 
      HBox box =  FXMLLoader.load(getClass().getResource("/hey/src/application/simpleui.fxml")); 

    //  VBox vBox = new VBox(new Label("This goes down"), new Button("Down"), new Button("Further Down")); 
    // 
    //  box.getChildren().addAll(new Label("UserName"), new TextField(), new Button("Connect"), vBox); 

      Scene scene = new Scene(box); 
      primaryStage.setScene(scene); 
      primaryStage.show(); 
     } 

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



    //this is my fxml code 
    import java.io.IOException; 

    import javafx.application.Application; 
    import javafx.fxml.FXMLLoader; 
    import javafx.scene.Scene; 
    import javafx.scene.control.Button; 
    import javafx.scene.control.Label; 
    import javafx.scene.control.TextField; 
    import javafx.scene.layout.HBox; 
    import javafx.scene.layout.VBox; 
    import javafx.stage.Stage; 

    public class SimpleUI extends Application { 
     @Override 
     public void start(Stage primaryStage) throws Exception { 
      HBox box = FXMLLoader.load(getClass().getResource("/hey/src/application/simpleui.fxml")); 

    //  VBox vBox = new VBox(new Label("This goes down"), new Button("Down"), new Button("Further Down")); 
    // 
    //  box.getChildren().addAll(new Label("UserName"), new TextField(), new Button("Connect"), vBox); 

      Scene scene = new Scene(box); 
      primaryStage.setScene(scene); 
      primaryStage.show(); 
     } 

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




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

<?import javafx.scene.layout.*?> 
<?import javafx.scene.control.Label?> 
<?import javafx.scene.control.TextField?> 

<HBox> 
    <children> 
     <Label text= "UserName" /> 
     <TextField /> 
     <Button text= "Connect" /> 
    </children> 
</HBox> 

fixe: Je l'ai fixé grâce à les personnes qui ont répondu à ma question

+0

Que se passe-t-il lorsque vous exécutez votre code? Est-ce que ça donne une erreur ou quelque chose? – TM00

+0

oui J'ai édité la question afin que vous puissiez voir l'exception, je chercherai ce problème, j'ai vu que peut-être le fichier fxml était dans le mauvais répertoire, mais ce n'était pas –

+0

Montrez la structure de votre projet. Si 'simpleui.fxml' est dans le même paquet que la classe' SimpleUI' alors 'FXMLLoader.load (getClass(). GetResource (" simpleui.fxml "));' chargera correctement le fichier FXML. – MBec

Répondre

0

Je ne suis pas sûr que cela va résoudre votre problème, mais une différence que je vois entre ma façon typique des fichiers FXML de chargement et votre code affiché est le chemin que vous chargeur à savoir:

 HBox box = FXMLLoader.load(getClass().getResource("/hey/src/application/simpleui.fxml")); 

je charge normaly FXML en tant que tel:

 AnchorPane page = (AnchorPane) FXMLLoader.load(PreloadController.class.getResource("PreloaderGUI.fxml")); 

Et assurer que mon Controller et le fichier FXML est dans le même paquet. Je suppose que la méthode getResource est la même entre ces exemples, mais le chemin String passé est différent. Essayez de changer le nom du fichier fxml et voyez si cela fonctionne. i.e comme suit:

HBox box = FXMLLoader.load(getClass().getResource("simpleui.fxml")); 
+0

FXML et le contrôleur ne doit pas être dans le même paquet. L'emplacement de 'Controller' est acquis de' fx: controller = "path.to.Controller" 'dans le fichier FXML. Chargement du fichier FXML est le même que le chargement de toute ressource à partir du chemin de la classe. Voir: http://stackoverflow.com/a/2593175/6708868 – MBec

+0

Ne fonctionne toujours pas –