javafx problem z pobraniem komponentów z pliku jar

0

Witam,

 @FXML protected void Polacz(ActionEvent event) {
                            poziomUprawnien = 0;
                            userID =0;
                            hasloUzytkownika = null;
                            String haslo = "";
        Connection c = null;
        try {
            
            c=Zespol.getConnection("root", "");
            if(!(c == null)){
                
            

                    try{
                         __Stage stag = (Stage) loginButton.getScene().getWindow();
            
                stag.close();__
                        
                    
                        ResultSet result = statement.executeQuery("SELECT `poziom`, `pracownicy`.`user_id`, `haslo` "
                                + "FROM `pracownicy`, `uprawnienia`"
                                + " WHERE `pracownicy`.`user_id` = `uprawnienia`.`user_id` "
                                + "AND `pracownicy`.`login` = '"+username.getText()+"';");
                        statement.close();
                        while (result.next()) {
                            poziomUprawnien = result.getInt(1);
                            userID =result.getInt(2);
                            hasloUzytkownika = result.getString(3);
                            
                        }
                        JOptionPane.showMessageDialog(null, "git");
                       ** Stage stag = (Stage) loginButton.getScene().getWindow();
            
                stag.close();
**                    }catch (SQLException ex) {
                       JOptionPane.showMessageDialog(null, "Nie pobrano id pracownika. " + ex);
                       
                    }

posiadam taki kod. Problem polega na tym, że program zatrzymuje się jakby przed zapytaniem:
ResultSet result = statement.executeQuery("SELECT poziom, pracownicy.user_id, haslo "
+ "FROM pracownicy, uprawnienia"
+ " WHERE pracownicy.user_id = uprawnienia.user_id "
+ "AND pracownicy.login = '"+username.getText()+"';");

Tzn. operacje które są przed nim zostaną wykonane, ale to po nim już niestety nie. Chodzi mi choćby przykłądowo tutaj o zamknięcie okna.
Jeśli chce je zamknąć przed zapytaniem(podkreślony kod), to udaje się to, jeśli po(pogrubiony kod) to już niestety nie.

Program działa normalnie odpalany w netbeansie, lecz powyższy problem występuje, gdy uruchamiam wygenerowany plik jar.

Spotkał się ktoś kiedyś z czymś takim ?

0

Ogólnie teraz widzę, że gdy odpalam z jara to program zatrzymuje się na tym zapytaniu i nic dalej się nie dzieje.

0
 @FXML protected void Polacz(ActionEvent event) {
                            poziomUprawnien = 0;
                            userID =0;
                            hasloUzytkownika = null;
                            String haslo = "";
        Connection c = null;
        try {
            
            c=Zespol.getConnection("root", "");
            if(!(c == null)){
                
            

                    try{
                        
                        
                        
                    statement.execute("USE `projekt`"); //wybór bazy  
                        ResultSet result = statement.executeQuery("SELECT `poziom`, `pracownicy`.`user_id`, `haslo` "
                                + "FROM `pracownicy`, `uprawnienia`"
                                + " WHERE `pracownicy`.`user_id` = `uprawnienia`.`user_id` "
                                + "AND `pracownicy`.`login` = '"+username.getText()+"';");
                        
                        
            
                        while (result.next()) {
                            poziomUprawnien = result.getInt(1);
                            userID =result.getInt(2);
                            hasloUzytkownika = result.getString(3);
                            
                        }
                        
                        
                    }catch (SQLException ex) {
                       JOptionPane.showMessageDialog(null, "Nie pobrano id pracownika. " + ex);
                       
                    }
                    
                    haslo = password.getText();
                    
                    
                    MessageDigest m = null;
                    try {
                        m = MessageDigest.getInstance("MD5");
                    } catch (NoSuchAlgorithmException ex) {
                        Logger.getLogger(Raport.class.getName()).log(Level.SEVERE, null, ex);
                        }
                    m.reset();
                    m.update(haslo.getBytes());
                    
                    byte[] digest = m.digest();
                    BigInteger bigInt = new BigInteger(1,digest);
                    String hashHaslo = bigInt.toString(16);
                    
                    while(hashHaslo.length() < 32 ){
                        hashHaslo = "0"+hashHaslo;
                    }
                    
                    
                    
                    if(userID != 0){
                        if(hasloUzytkownika.equals(hashHaslo) ){
                    Stage stag = (Stage) loginButton.getScene().getWindow();
            
                stag.close();
                    Parent root = null;
                try {
                    root = FXMLLoader.load(getClass().getResource("main.fxml"));
                } catch (IOException ex) {
                    Logger.getLogger(FXMLDocumentController.class.getName()).log(Level.SEVERE, null, ex);
                }
    
                    Scene scene = new Scene(root, 1200, 650);
                    Stage stage = new Stage();
                    stage.setTitle("Projekt");
                    stage.setScene(scene);
                    stage.show();
                    

                    
                        if(poziomUprawnien == 2){
                            mainTabPane.getTabs().remove(0);
                        }
                        
                        if(poziomUprawnien == 1){
                            mainTabPane.getTabs().remove(2);
                            mainTabPane.getTabs().remove(1);
                        }
                        if(poziomUprawnien == 0){
                            mainTabPane.getTabs().remove(2);
                            mainTabPane.getTabs().remove(1);
                            mainTabPane.getTabs().remove(0);
                        }
                    
                        }else JOptionPane.showMessageDialog(null, "Podano błędne hasło.");
                    }else JOptionPane.showMessageDialog(null, "Nie znaleziono użytkownika.");
                    
                    
                    
                    

           }
        } catch (SQLException ex) {
            Logger.getLogger(FXMLDocumentController.class.getName()).log(Level.SEVERE, null, ex);
            textLogin.setText("Nie udało się zalogować! Spróbuj ponownie.");
        }
        
        
    }

no tak wygląda cała metoda. Uruchamiając w netbeansie wszystko działa poprawnie. Po uruchomieniu jara wykonują się wszystkie operacje do momentu pierwszego zapytania, po nim program staje. Połączenia z bazą udaje się wykonać w metodzie getConnection, no i na tym koniec.

0

Wczoraj źle określiłem problem. Teraz wykryłem iż problem leży w tym że gdy włączam program z pliku jar, nie odczytuje on komponentów z okna pliku fxml. Zmienna username, który jest textfieldem daje zawsze wartość null przez co wyrzuca wyjątek nullPointerException. Jak temu zaradzić ?? Dodam że w pliku jest ustawiony odpowiedni controller

<GridPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="zespol.FXMLDocumentController">
0
@FXML public static TextField login;
    @FXML public static PasswordField password;
    
    @FXML public static Button loginButton;
    
    @FXML public static Text loginText;
    
    @FXML protected void Polacz(ActionEvent event) throws IOException {
                            poziomUprawnien = 0;
                            userID =0;
                            hasloUzytkownika = null;
                            String haslo = "";
        Connection c = null;
        try {
            
            c=Zespol.getConnection("root", "");
            if(!(c == null)){

                if(login == null){
        JOptionPane.showMessageDialog(null,"null");
                }
   
                    try{
                        
                        
                        
                    statement.execute("USE `projekt`"); //wybór bazy  
                    
                        ResultSet result = statement.executeQuery("SELECT `poziom`, `pracownicy`.`user_id`, `haslo` "
                                + "FROM `pracownicy`, `uprawnienia`"
                                + " WHERE `pracownicy`.`user_id` = `uprawnienia`.`user_id` "
                                + "AND `pracownicy`.`login` = '"+login.getText()+"';");
                        
                        
            
                        while (result.next()) {
                            poziomUprawnien = result.getInt(1);
                            userID =result.getInt(2);
                            hasloUzytkownika = result.getString(3);
                            
                        }
                        
                        
                    }catch (Exception ex) {
                       JOptionPane.showMessageDialog(null, "Nie pobrano id pracownika. " + ex);
                       
                    }
                    
                    

Wyrzuca mi wyjątek dotyczący textfielda: nullpointerException. Dla pewności wstawiłem warunek sprawdzający czy rzeczywiście tak jest i niestety warunek jest prawdziwy. Sytuacja ma miejsce po odpaleniu pliku jar, odpalając projekt w netbeansie wszystko działa jak należy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1