Слушател в клас @Autowired, извикан два пъти

Това е автоматичният клас:

 @Component
public class AlfrescoLoginFrame extends javax.swing.JFrame {
    private static final long serialVersionUID = 6302651813469103752L;

    @Autowired
    private MainController controller;

    public AlfrescoLoginFrame() {
        initComponents();
        initActions();

    }


    private void initComponents() {
         try {
            UIManager.setLookAndFeel("com.jgoodies.looks.windows.WindowsLookAndFeel");
            //UIManager.setLookAndFeel ( "com.alee.laf.WebLookAndFeel" );
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (UnsupportedLookAndFeelException e) {
            e.printStackTrace();
        }

        lbl_user_name = new javax.swing.JLabel();
        lbl_password = new javax.swing.JLabel();
        txt_user_name = new javax.swing.JTextField();
        txt_password = new javax.swing.JTextField();
        bt_connexion = new javax.swing.JButton();
        bt_annuler = new javax.swing.JButton();
        lbl_alfreco_logo = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("Se connecter");
        lbl_user_name.setText("Nom d'utilisateur");
        lbl_password.setText("Mot de passe");

        bt_connexion.setIcon(new ImageIcon(LOGIN_ICON)); 
        bt_connexion.setText("Connexion");      

        bt_annuler.setIcon(new ImageIcon(LOGOUT_ICON)); 
        bt_annuler.setText("Annuler");


        initActions();

        lbl_alfreco_logo.setIcon(new ImageIcon(ALFRESCO_LOGO));
        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(79, 79, 79)
                        .addComponent(bt_connexion)
                        .addGap(18, 18, 18)
                        .addComponent(bt_annuler, javax.swing.GroupLayout.PREFERRED_SIZE, 105, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(89, 89, 89)
                        .addComponent(lbl_alfreco_logo))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(47, 47, 47)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(lbl_password, javax.swing.GroupLayout.PREFERRED_SIZE, 79, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(lbl_user_name))
                        .addGap(32, 32, 32)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(txt_user_name, javax.swing.GroupLayout.PREFERRED_SIZE, 107, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(txt_password, javax.swing.GroupLayout.PREFERRED_SIZE, 107, javax.swing.GroupLayout.PREFERRED_SIZE))))
                .addContainerGap(91, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(28, 28, 28)
                .addComponent(lbl_alfreco_logo, javax.swing.GroupLayout.PREFERRED_SIZE, 57, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 53, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lbl_user_name)
                    .addComponent(txt_user_name, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(23, 23, 23)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lbl_password)
                    .addComponent(txt_password, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(49, 49, 49)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(bt_connexion)
                    .addComponent(bt_annuler))
                .addGap(25, 25, 25))
        );

        pack();

    }                       



    public void initActions(){
        bt_connexion.addActionListener(new LoginActionListener());
    }

    private class LoginActionListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            //System.out.println("***"+e.getActionCommand());
            // it displays the same event 

            controller.checkLoginCreditsRedirect(txt_user_name.getText(),txt_password.getText());

        }

    }



    // Declaration des variables                   
    private javax.swing.JButton bt_annuler;
    private javax.swing.JButton bt_connexion;
    private javax.swing.JLabel lbl_alfreco_logo;
    private javax.swing.JLabel lbl_password;
    private javax.swing.JLabel lbl_user_name;
    private javax.swing.JTextField txt_password;
    private javax.swing.JTextField txt_user_name;
    public static final String LOGIN_ICON= System.getProperty("user.dir") + "/resource/com/talan/launcher/ui/icon/login_icon.png";
    public static final String ALFRESCO_LOGO = System.getProperty("user.dir") + "/resource/com/talan/launcher/ui/icon/alfresco_logo.jpg";
    public static final String LOGOUT_ICON = System.getProperty("user.dir") + "/resource/com/talan/launcher/ui/icon/logout_icon.png"; }

Както можете да видите слушателя:

 public void initActions(){
    bt_connexion.addActionListener(new LoginActionListener());
}

private class LoginActionListener implements ActionListener {

    @Override
    public void actionPerformed(ActionEvent e) {
        //System.out.println("***"+e.getActionCommand());
        // it displays the same event 

        controller.checkLoginCreditsRedirect(txt_user_name.getText(),txt_password.getText());

    }

}

И това е класът MainController в рамките на класа AlfrescoLoginFrame е @Autowired:

  @Component
    public class MainController {
    @Autowired
     private ISessionRepo sessionRepo;
    @Autowired
    private WrongAlfrescoCreditsDialog wrongAlfrescoCredistDiag;



    public MainController() {
        }

    public void checkLoginCreditsRedirect(String login, String password){

           checkLoginCredits(login, password);
           if(sessionRepo.isValid()){
               //This sop executes twice
               System.out.println("Logged in !");

           }else{
             //Also sop executes twice
               System.out.println("Not logged in : wrond credit !");
               wrongAlfrescoCredistDiag.riseWrongCreditsPanel(alfresco_loginFrame);
           }
       }
}

Така че методът checkLoginCreditsRedirect(String login, String password) се извиква два пъти. Мисля, че това е ПРОЛЕТЕН проблем. Всякаква помощ ще бъде благодарна, момчета?


person senjoux    schedule 23.07.2015    source източник
comment
Защо свързвате автоматично контролера? Защо контролерът не е анотиран конкретно като контролер, а като компонент.   -  person We are Borg    schedule 23.07.2015
comment
Работи правилно (@Controller е спецификация за @Component), но за добра практика трябва да бъде анотиран с (@Controller), както ти каза, thx брато   -  person senjoux    schedule 23.07.2015
comment
Може да работи правилно.. но защо ру автоматично окабеляване на контролера?   -  person We are Borg    schedule 23.07.2015


Отговори (2)


Вие сами извиквате initActions() два пъти. Веднъж от вашия конструктор и веднъж по средата на метода initComponents

Следващият път, когато имате проблем като този: опитайте да отстраните грешки, като добавите new Exception().printStackTrace(); в метода, който случайно се извиква два пъти

person Stef    schedule 23.07.2015
comment
Благодаря ти @Stef, изгубих се между тези редове LoL - person senjoux; 23.07.2015

Обаждате се на initActions(); два пъти. Веднъж в конструктор и втори път в initComponents метод.

person talex    schedule 23.07.2015