2010-12-14 9 views
2

salut i ont un programme plein écran que je ne veux pas les gens à fermer à moins qu'ils aient un mot de passe j'ai ce code au momentpersonnes stop java de fermeture

public void windowClosing(WindowEvent arg0) 
{ 
    System.out.println("HERE"); 
    String inputValue = JOptionPane.showInputDialog("Please input the closeword"); 

    if (inputValue != "closeplz") 
    { 

    } 
} 

dans l'instruction if je le veux arrêter la méthode pour que le programme se ferme. toute aide serait grandement aprecheated grâce ste

+2

Qu'en est-CTRL + ALT + SUPPR ou CTRL + SHIFT + ESC sur Windows? – thejh

+5

tuer le processus java en cours ne demandera pas de mot de passe. –

+2

Qu'essayez-vous de faire? Il y a probablement un meilleur moyen. – thejh

Répondre

7

Vous devez appeler

setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); 

sur (ou dans) l'instance JFrame. Alors le cadre ne fermera pas à moins que vous le fassiez manuellement, bien que windowClosing() soit encore appelé. A l'intérieur, vous pouvez ensuite appeler conditionnellement

System.exit(1); 

qui mettra fin à l'application. Assurez-vous de faire le nettoyage nécessaire en premier.

+1

Le code retour 1 ne signale-t-il pas une erreur et vous devez utiliser 0? – thejh

+0

@thejh: vrai, c'est la convention générale. Mais les applications GUI ont rarement (voire jamais) leur code de retour vérifié de toute façon. –

1

Découvrez Closing an Applicaton pour une classe simple pour vous aider avec ceci. Vous devez fournir l'action de fermeture personnalisée qui invite l'utilisateur à entrer le mot de passe.

En utilisant votre exemple simple le code serait:

Action ca = new AbstractAction() 
{ 
    public void actionPerformed(ActionEvent e) 
    { 
     JFrame frame = (JFrame)e.getSource(); 

     String inputValue = JOptionPane.showInputDialog("Please input the closeword"); 


     if (! inputValue.equals("closeplz")) 
     { 
      frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); 
     } 
    } 
}; 

CloseListener cl = new CloseListener(ca);