Foro de elhacker.net

Programación => Java => Mensaje iniciado por: MC.cover en 15 Diciembre 2016, 06:34 am



Título: Ayuda cargar ComboBox JavaFX FXML
Publicado por: MC.cover en 15 Diciembre 2016, 06:34 am
Hola buena tengo un problema y es que quiero cargar un combobox con datos devueltos por una base de datos y hasta acá todo bien. La cosa es que al ejecutar el método el cual llenaría el combobox lanza error de compilacion porque el tiempo en el cual se lanzo el método no es el correcto.

Codigo:
Código
  1. public class FXMLDocumentRegisterController implements Initializable {
  2.  
  3.    @FXML
  4.    private JFXComboBox<String> CmbCountry;
  5.  
  6.    @FXML
  7.    private JFXButton BtnBack;
  8.  
  9.    @FXML
  10.    void BtnBack_Clicked(ActionEvent event) throws IOException{
  11.            Parent parent = FXMLLoader.load(getClass().getResource("FXMLDocumentLogIn.fxml"));
  12.            Scene loginScene = new Scene(parent);
  13.            Stage stage = (Stage)((Node) event.getSource()).getScene().getWindow();
  14.                  stage.hide();
  15.                  stage.setScene(loginScene);
  16.                  stage.show();
  17.    }
  18.  
  19.    @Override
  20.    public void initialize(URL url, ResourceBundle rb) {
  21.        this.CmbCountry = new JFXComboBox<String>();//aca inicializo el combobox
  22.        loadCmb();//aca ejecuto el metodo de carga del combobox
  23.    }
  24.  
  25.    private void loadCmb(){//este metodo carga el combobox con los datos devueltos de la base de datos
  26.        RepoPais repo = FabricaReposSQL.CrearRepoPais();
  27.        Iterable<Pais> p = repo.FindAll();
  28. for (Pais pais : p) {
  29.            CmbCountry.getItems().add(pais.Nombre);
  30. }
  31.    }
  32.  
  33. }
  34.  

Yo no veo el error, si me pueden ayudar se los agradecería mucho, soy nuevo en javaFX con FXML y es un poco mariante al inicio.
Desde ya muchas gracias. :)


Título: Re: Ayuda cargar ComboBox JavaFX FXML
Publicado por: kingcreek en 15 Diciembre 2016, 10:18 am
Tal vez diste mucho de la solucion, pues como he dicho en un post anterior no he trabajado con FXML, pero si el error te lo da al llenar el combobox lo que se me ocurre es aqui:
Código
  1. CmbCountry.getItems().add(pais.Nombre);

getItems().add() creo que lleva 2 argumentos, 1 es la posicion y 2 el valor. Prueba reemplazandolo de esta manera:
Código
  1. CmbCountry.getItems().addAll(pais.Nombre);
  2.  
  3. //o este en su defecto
  4.  
  5. CmbCountry.add(pais.Nombre);
  6.  

Si estoy equivocado no dudes en decirlo para revisarlo, un saludo


Título: Re: Ayuda cargar ComboBox JavaFX FXML
Publicado por: MC.cover en 15 Diciembre 2016, 17:12 pm
Tal vez diste mucho de la solucion, pues como he dicho en un post anterior no he trabajado con FXML, pero si el error te lo da al llenar el combobox lo que se me ocurre es aqui:
Código
  1. CmbCountry.getItems().add(pais.Nombre);

getItems().add() creo que lleva 2 argumentos, 1 es la posicion y 2 el valor. Prueba reemplazandolo de esta manera:
Código
  1. CmbCountry.getItems().addAll(pais.Nombre);
  2.  
  3. //o este en su defecto
  4.  
  5. CmbCountry.add(pais.Nombre);
  6.  

Si estoy equivocado no dudes en decirlo para revisarlo, un saludo

Hola el error persiste yo creo que es que cuando se lanza el método loadCmb aun la visual no se termino de cargar.
Este es el error:
Código
  1. java.lang.RuntimeException: java.lang.reflect.InvocationTargetException


Título: Re: Ayuda cargar ComboBox JavaFX FXML
Publicado por: kingcreek en 16 Diciembre 2016, 01:03 am
Para ver la excepcion mejor, mete el codigo de loadCmb() dentro de un try / catch para poder ver mejor donde falla.
Código
  1. private void loadCmb(){//este metodo carga el combobox con los datos devueltos de la base de datos
  2.        try {
  3.                 RepoPais repo = FabricaReposSQL.CrearRepoPais();
  4.                 Iterable<Pais> p = repo.FindAll();
  5.                 for (Pais pais : p) {
  6.                       CmbCountry.getItems().add(pais.Nombre);
  7.                 }
  8.             } catch (InvocationTargetException e) {
  9.                 e.getCause().printStackTrace();
  10.             }
  11.  
  12.    }
  13.  
  14.  

Tambien prueba a eliminar la linea donde agregas los datos al combobox, y ves si el error lo tienes ahi.


Título: Re: Ayuda cargar ComboBox JavaFX FXML
Publicado por: MC.cover en 16 Diciembre 2016, 03:14 am
Para ver la excepcion mejor, mete el codigo de loadCmb() dentro de un try / catch para poder ver mejor donde falla.
Código
  1. private void loadCmb(){//este metodo carga el combobox con los datos devueltos de la base de datos
  2.        try {
  3.                 RepoPais repo = FabricaReposSQL.CrearRepoPais();
  4.                 Iterable<Pais> p = repo.FindAll();
  5.                 for (Pais pais : p) {
  6.                       CmbCountry.getItems().add(pais.Nombre);
  7.                 }
  8.             } catch (InvocationTargetException e) {
  9.                 e.getCause().printStackTrace();
  10.             }
  11.  
  12.    }
  13.  
  14.  

Tambien prueba a eliminar la linea donde agregas los datos al combobox, y ves si el error lo tienes ahi.

Hola ya he colocado anteriormente el código de loadCmb en un try/catch y el error que lanza es exactamente el mismo que puse en el post anterior.
Como otra parte realice lo que me dijiste de comentar la linea en la cual se va iterando para poder cargar el ComboBox y el error proviene de esa linea.


Título: Re: Ayuda cargar ComboBox JavaFX FXML
Publicado por: kingcreek en 16 Diciembre 2016, 22:10 pm
Si puedes poner el log completo se podria itentificar mejor el problema, InvocationTargetException puede ser lanzado por muchas causas como pasar un parametro null, si imprimes por pantalla los paises en vez de cargarlos en el comboBox podrias ver si estan pasando correctamente o si el error es que no obtiene el nombre de la DB. El log completo deberia dar la pista de lo que esta ocurriendo.