elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Variable FXML Null en JavaFX
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Variable FXML Null en JavaFX  (Leído 1,553 veces)
carlosuc99

Desconectado Desconectado

Mensajes: 42


Ver Perfil
Variable FXML Null en JavaFX
« en: 19 Abril 2014, 17:10 pm »

Buenas,

Tengo una aplicación en JavaFX realizada por FXML mediante Modelo Vista Controlador. El tema es que quiero mover unos sliders con el teclado. Para ello en la clase principal pongo un KeyEvent para escuchar lo que acontece en el teclado. En la clase FXMLDocumentController que actúa de controlador creo las variables FXML de los sliders. Estas variables son pasadas a una tercera clase. Donde allí se modifican los sliders cuando se hace algún click.

El problema es que cuando paso las variables de los sliders en la tercera clase se almacenan perfectamente pero a la hora de ejecutar el código que debería modificar los sliders que viene pasado de la clase principal cuando se hace click estás variables FXML son null.

Aquí os dejo el código:

Clase principal:
Código:
public class OpenPilot extends Application {
   
    Movements Movements = new Movements();
     
    @Override
    public void start(Stage stage) throws Exception {
       
        Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));

       
        Scene scene = new Scene(root);
       
        scene.setOnKeyPressed(new EventHandler<KeyEvent>() {
            @Override
            public void handle(KeyEvent Key) {
               Movements.GetKeys(Key);
            }
        });
       
        stage.setScene(scene);
        stage.show();
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }
   
}

Aquí el controlador:

Código:
public class FXMLDocumentController implements Initializable {
   
    Movements Movements = new Movements();
 
    @FXML public Slider SpeedSlider;
    @FXML public Slider TurnsSlider;
   

   
   
   
    @Override
    public void initialize(URL url, ResourceBundle rb) {
     
        //Send GUI Information
        Movements.GetSliders(SpeedSlider, TurnsSlider);
    }   
       
}

Y por última la tercera clase llamada Movements:

Código:
public class Movements {
   
    //Define Data Variables
    public double SpeedValue;
    public double TurnsValue;
   
    //Define GUI Variables
    private Slider SpeedSlider;
    private Slider TurnsSlider;
   
    public void GetSliders(Slider SpeedSlider, Slider TurnsSlider) {
        this.SpeedSlider = SpeedSlider;
        this.TurnsSlider = TurnsSlider;
}

    //Get Sliders
   
    public void GetKeys(KeyEvent Key) {
        System.out.println(Key.getCode());
        System.out.println(SpeedSlider);
       
        Platform.runLater(new Runnable() {
                @Override public void run() {
                    TurnsSlider.setValue(10);
                }
        });
    }

}


En línea

carlosuc99

Desconectado Desconectado

Mensajes: 42


Ver Perfil
Re: Variable FXML Null en JavaFX
« Respuesta #1 en: 19 Abril 2014, 19:26 pm »

Me han dicho que el problema viene dado porque estoy usando dos instancias de Movements, una en la clase principal  y otra en el controlador y como no uso métodos estáticos no soy capaz de mantener el contenido de las variables.

He probado este código:

Controlador:

Código:
public class FXMLDocumentController implements Initializable {

    Movements movements = new Movements();

    public Movements getMovements() {
        return movements;
    }

    @FXML public Slider SpeedSlider;
    @FXML public Slider TurnsSlider;

    @Override
    public void initialize(URL url, ResourceBundle rb) {

        //Send GUI Information
        movements.GetSliders(SpeedSlider, TurnsSlider);
    }   

}

y Clase Principal:

Código:
public class OpenPilot extends Application {

    Movements movements;

    @Override
    public void start(Stage stage) throws Exception {
        FXMLLoader fxmlLoader = new FXMLLoader();
        Parent root = fxmlLoader.load(getClass().getResource("FXMLDocument.fxml"));

        // get movements from via controller
        FXMLDocumentController controller = (FXMLDocumentController)fxmlLoader.getController();
        movements = controller.getMovements();

        Scene scene = new Scene(root);

        scene.setOnKeyPressed(new EventHandler<KeyEvent>() {
            @Override
            public void handle(KeyEvent Key) {
               movements.GetKeys(Key);
            }
        });

        stage.setScene(scene);
        stage.show();
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }

}

Pero en la clase principal alguna de estas dos líneas genera error:

Código:
FXMLDocumentController controller = (FXMLDocumentController)fxmlLoader.getController();
        movements = controller.getMovements();

El error no es detectado en un principio por netbeans pero al arrancar el programa en la consola del IDE me da lo siguiente:

Citar
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:367)
   at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:305)
   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:894)
   at com.sun.javafx.application.LauncherImpl.access$000(LauncherImpl.java:56)
   at com.sun.javafx.application.LauncherImpl$1.run(LauncherImpl.java:158)
   at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NullPointerException
   at openpilot.OpenPilot.start(OpenPilot.java:35)
   at com.sun.javafx.application.LauncherImpl$8.run(LauncherImpl.java:837)
   at com.sun.javafx.application.PlatformImpl$7.run(PlatformImpl.java:335)
   at com.sun.javafx.application.PlatformImpl$6$1.run(PlatformImpl.java:301)
   at com.sun.javafx.application.PlatformImpl$6$1.run(PlatformImpl.java:298)
   at java.security.AccessController.doPrivileged(Native Method)
   at com.sun.javafx.application.PlatformImpl$6.run(PlatformImpl.java:298)
   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.access$300(WinApplication.java:39)
   at com.sun.glass.ui.win.WinApplication$4$1.run(WinApplication.java:112)
   ... 1 more
Exception running application openpilot.OpenPilot
Java Result: 1


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Setear una variable null en javascript
Desarrollo Web
Pablo Videla 0 1,713 Último mensaje 7 Diciembre 2011, 21:37 pm
por Pablo Videla
JavaFX
Java
mapers 0 1,441 Último mensaje 31 Mayo 2012, 07:45 am
por mapers
[JavaFX] Manual para aprender JavaFX
Java
jaxoR 1 8,722 Último mensaje 17 Noviembre 2013, 20:16 pm
por Mitsu
Ayuda JavaFX FXML
Java
MC.cover 2 1,366 Último mensaje 15 Diciembre 2016, 06:29 am
por MC.cover
Ayuda cargar ComboBox JavaFX FXML
Java
MC.cover 5 3,140 Último mensaje 16 Diciembre 2016, 22:10 pm
por kingcreek
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines