Bonjour,
J'ai une petite question :

Actuellement j'ai une classe principale: MonApplication. Lorsqu'elle s'exécute, elle :
1° : teste la connexion au SGBD
2° : Affiche une fenêtre de login et attend.
2° - 1 : La fenêtre de login à une action qui tente d'authentifier le couple login & password.
2° - 2 : Si l'authentification est réussie, elle réveille le Thread de MonApplication.

Pour cela, je passe à la fenêtre de login une référence vers MonApplication qui implémente Runnable. Mais je ne trouve pas cela trés propre...

Avez-vous une autre solution ?


LoginFrame
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
public class LoginFrame extends JFrame { 
  private Runnable mainThread; 
 
  public LoginFrame(Runnable mainThread) { 
    super(); 
    initialize(); // Place le contenu etc.. 
    this.mainThread = mainThread; 
  } 
 
  private JButton getBtn_enter() { 
    ... 
    btn_enter.addActionListener(new ActionListener(){ 
      User user = 
         User.authentifie(in_username.getText(), in_password.getPassword());  
 
      if ( user.isAuth() ){ 
        ((MonApplication) mainThread).setUser(user); 
        frame.dispose(); 
      } 
    } 
  } 
 
}
MonApplication
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
public class MonApplication implements Runnable{ 
 
  private static User user; 
 
  public void run() { 
    loginFrame = new LoginFrame(this); 
    loginFrame.setVisible(true); 
    try { 
      while(user==null) 
        wait(); 
    } catch (InterruptedException e) { 
      e.printStackTrace(); 
    } 
  } 
 
  public synchronized void setUser(User user){ 
    MonApplication.user = user; 
    notify(); 
  } 
 
}
Et pour ce qui est de l'authentification proprement dite, moi je me contente d'une simple requête "SELECT * FROM Users WHERE Login=.. AND Password=..."

Mais il y à javax.security.auth.login aussi ..

Je voudrais vraiment faire ça correctement, histoire de pouvoir le réutiliser dans d'autres applications mais je suis perdu et n'ai pas beaucoups d'idées sur la manière de le faire.