[Java] jCheckBox "Remember Me"

alphaxenox -  
 alphaxenox -
Bonjour :)

J'ai crée un launcher personnalisé pour mon serveur Minecraft en java , avec Netbeans. Mais je bloc au moment de faire la case a cocher "Remember me" pour enregistrer l'identifiant et le mot de passe et ensuite les réaffichers dans les cases approprié au lancement du programme. J'ai donc avec :
private void jCheckBox1MouseClicked(java.awt.event.MouseEvent evt) {  


}


Sans savoir quoi faire , il faudrait que le programme stock les infos dans un fichier en .md5 mais je sais pas comment faire , donc pour tester , j'ai juste fais en sorte que le programme écrive l'Id et le pass dans un simple fichier .txt :

private void jCheckBox1MouseClicked(java.awt.event.MouseEvent evt) {                                          

      
  File file = new File("testFileWriter.txt");  
    
  FileWriter fw = null;  
  FileReader fr = null;  
        try {  
            //Création de l'objet  
            fw = new FileWriter(file);  
        } catch (IOException ex) {  
            Logger.getLogger(Launch.class.getName()).log(Level.SEVERE, null, ex);  
        }  
   String str = jTextField1.getText();  
                        str += " ";  
   str += jPasswordField1.getText();  
        try {  
            //On écrit la chaîne  
            fw.write(str);  
        } catch (IOException ex) {  
            Logger.getLogger(Launch.class.getName()).log(Level.SEVERE, null, ex);  
        }  
        try {  
            //On ferme le flux  
            fw.close();  
        } catch (IOException ex) {  
            Logger.getLogger(Launch.class.getName()).log(Level.SEVERE, null, ex);  
        }      
    // TODO add your handling code here:  
}


Mais voila , même a partir de la , je ne sais pas comment faire en sorte qu'au démarrage du programme les info ceux remettent et que le JCheckBox reste cocher même après avoir relancer le programme.

Et pour finir , je préfère être honnête avec vous , je ne sais presque pas coder en Java , je fais surtout du C++ , mais bon , au début j'avais réussi a faire le Launcher en VB.net sauf qu'il y a des joueurs sous mac, donc j'ai étais obligé de me tourner vers le Java, en cherchant sur les forums et avec ce que je connaissais déja avec le c++ j'ai réussi a tous faire : http://s3.noelshack.com/old/up/capture-f68e859c50.png , sauf la CheckBox "Remember Me" ou je coince complètement (Je sais l'interface est moche pour l'instant :) )

Donc s'il vous plait , je sais que de donner des indices et après de chercher tous seul ça fait bien progresser , mais moi je ne souhaite pas apprendre le Java (Je suis bien avec mon C++ :p )

Merci :)

Cordialement Alpha
A voir également:

3 réponses

KX Messages postés 19031 Statut Modérateur 3 020
 
En gros ce que tu demandes c'est des méthodes de lecture et d'écriture de deux informations (identifiant et mot de passe) dans un fichier texte, et si la lecture c'est bien passé à l'initialisation du programme, que la case "remember me" soit cochée, c'est ça ?
0
alphaxenox
 
Oui , enfin en gros :

- L'utilisateur rentre son Id et Mot de passe
- Il coche la case "Remember"
- Le programme crypt L'Id et le Mot de passe et le stock dans un fichier.md5
- L'utilisateur ferme le programme
- L'utilisateur re-lance le programme et l'Id et le Mot de passe sont toujours là et la case "Remember" toujours coché.

Voila , comme dans toutes les applications/page web :)
0
KX Messages postés 19031 Statut Modérateur 3 020
 
Est-ce que tu as déjà un début du code (peu importe où tu en es) mais tout ce que tu auras déjà fait me fera gagner du temps ;-)
0
alphaxenox
 
Le code entier du Programme ? Parce que sinon dans la fonction
private void jCheckBox1MouseClicked(java.awt.event.MouseEvent evt) {    }


J'ai juste mis ça :
File file = new File("Id.txt");   
                File file2 = new File("Pass.txt");   
     
  FileWriter fw = null;   
  FileReader fr = null;   
                FileWriter fw2 = null;   
  FileReader fr2 = null;   
        try {   
            //Création de l'objet   
            fw = new FileWriter(file);   
            fw2 = new FileWriter(file2);   
        } catch (IOException ex) {   
            Logger.getLogger(Launch.class.getName()).log(Level.SEVERE, null, ex);   
        }   
   String str = jTextField1.getText();   
                        String str2 = jPasswordField1.getText();    
                          
        try {   
            //On écrit la chaîne   
            fw.write(str);   
            fw2.write(str2);   
        } catch (IOException ex) {   
            Logger.getLogger(Launch.class.getName()).log(Level.SEVERE, null, ex);   
        }   
        try {   
            //On ferme le flux   
            fw.close();   
            fw2.close();   
        } catch (IOException ex) {   
            Logger.getLogger(Launch.class.getName()).log(Level.SEVERE, null, ex);   
        }    


C'était juste pour tester si ça écrie bien dans les fichiers (J'ai fais deux fichier séparé pour test)

Après je voulais mettre :
String line; 
// Lecture du fichier ligne par ligne. Cette boucle se termine 
// quand la méthode retourne la valeur null. 
while ((line = buff.readLine()) != null) { 
System.out.println(line); 

jTextField2.setText(line); 

} 
} finally { 
// dans tous les cas, on ferme nos flux 
buff.close(); 
} 
} catch (IOException ioe) { 
// erreur de fermeture des flux 
System.out.println("Erreur --" + ioe.toString()); 
}


Dans
 public static void main(String args[])


Mais il me dit non-static variable JTextField2 cannot be referenced from a Static context.

Mais encore une fois c'était juste pour voir si ça marchait simplement avec un fichier .txt non crypté :)
0
KX Messages postés 19031 Statut Modérateur 3 020
 
Si ça t'intéresse de savoir pourquoi ton code marchait pas je regarderais mais si j'ai bien compris tu préfères rester au C++ ;-)
Donc voici une classe MD5 qui pourrait t'aider. J'ai fait ça rapidement, sachant que je ne connais pas du tout Minecraft ou son mode de fonctionnement. Mais ça devrait t'aider à faire ce que tu veux je pense ;-)

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Scanner;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

class MD5
{
	private String valeur;
	
	private MD5(String str)
	{
		valeur=str;
	}
	
	public MD5 (String identifiant,String password)
	{
		valeur=encode(identifiant+password);
	}

	public static String encode(String texte)
	{
		try
		{
			StringBuilder hashString = new StringBuilder();
			
			for (byte b : MessageDigest.getInstance("MD5").digest(texte.getBytes()))
			{
				String hex = Integer.toHexString(b);
				if (hex.length() == 1)
					hashString.append("0"+hex.charAt(hex.length()-1));
				else
					hashString.append(hex.substring(hex.length()-2));
			}
			
			return hashString.toString();
		}
		catch (NoSuchAlgorithmException e)
		{
			throw new Error(e.getMessage(),e.getCause());
		}
	}	
	
	public static void ecrire(File fichier,MD5 md) throws IOException 
	{
		FileOutputStream f = new FileOutputStream(fichier);
		f.write(md.valeur.getBytes());
		f.close();
	}
	
	public static MD5 lire(File fichier) throws FileNotFoundException
	{
		Scanner sc = new Scanner(fichier);
		String str = sc.nextLine();
		sc.close();
		return new MD5(str);
	}
	
	@Override
	public boolean equals(Object o)
	{
		return (o instanceof MD5) && valeur.equals(((MD5) o).valeur);		
	}	
}

class Test
{
	public static void main(String...args) throws IOException
	{
		MD5 a = new MD5("toto","motDePasse");
		MD5 b = MD5.lire(new File("toto.md5"));
		
		if (a.equals(b))
			System.out.println("OK");
		else
			System.out.println("KO");
		
		MD5 c = new MD5("titi","");
		MD5.ecrire(new File("titi.md5"), c);
	}
}
0
alphaxenox
 
Merci je vais voir :)

Non t'inquiéte pas Minecraft n'interagit pas la dedans :)
0
alphaxenox
 
Alors j'ai donc copié ton code dans
private void jCheckBox1MouseClicked(java.awt.event.MouseEvent evt)


4 erreurs de "illegal static declaration in inner class Text. Modifier "static" is only allowed in constant variable declarations" au niveau de chaque Fonction avec Static

3 erreurs de "non static variable cannot be referenced from a static context" au niveau de "MD5 c = new MD5("titi","");"
"MD5 a = new MD5("toto","motDePasse");"
et "return new MD5(str);"

1 'Générate missing Hashcode()" au niveau de "public boolean equals(Object o)"


Et 1 "String concatenation in StringBuilder.apprend" au niveau de "hashString.append("0"+hex.charAt(hex.length()-1));"

:)
0
KX Messages postés 19031 Statut Modérateur 3 020
 
Pour les 7 premières erreurs c'est parce qu'il ne faut pas le copier coller dans ta jCheckBox1MouseClicked, mais utiliser la classe MD5 pour lire/écrire des mots de passe, et les comparer. Regarde la classe Test pour voir des exemples d'utilisation.

Pour les deux autres, ça doit plutôt être des avertissements (NetBeans peut-être ?)
Pour le premier tu peux rajouter ce code (qui ne te servira à rien ^^) dans la classe MD5

@Override
public int hashCode()
{
	return valeur.hashCode();
}

Et pour le deuxième tu peux scinder la ligne en deux comme ceci :

hashString.append("0");
hashString.append(hex.charAt(hex.length()-1));
0
alphaxenox
 
Dacodac :)

Je testerais dans la soirée ou demain , et oui c'était des avertissement les deux derniers

Edit : Donc j'ai placé les deux classes

Et dans jCheckBoc j'ai fais :
 try { 
            Test.main(); 

             
            // TODO add your handling code here: 
        } catch (IOException ex) { 
            Logger.getLogger(Launch.class.getName()).log(Level.SEVERE, null, ex); 

        }



Mais quand je lance le programme , j'obtiens cette Erreur
:
Exception in thread "AWT-EventQueue-0" java.util.NoSuchElementException: No line found 
 at java.util.Scanner.nextLine(Scanner.java:1585) 
 at launchertoast.Launch$MD5.lire(Launch.java:79) 
 at launchertoast.Launch$Test.main(Launch.java:105) 
 at launchertoast.Launch.jCheckBox1MouseClicked(Launch.java:551) 
 at launchertoast.Launch.access$900(Launch.java:30) 
 at launchertoast.Launch$10.mouseClicked(Launch.java:269) 
 at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:270) 
 at java.awt.Component.processMouseEvent(Component.java:6507) 
 at javax.swing.JComponent.processMouseEvent(JComponent.java:3321) 
 at java.awt.Component.processEvent(Component.java:6269) 
 at java.awt.Container.processEvent(Container.java:2229) 
 at java.awt.Component.dispatchEventImpl(Component.java:4860) 
 at java.awt.Container.dispatchEventImpl(Container.java:2287) 
 at java.awt.Component.dispatchEvent(Component.java:4686) 
 at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) 
 at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4501) 
 at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) 
 at java.awt.Container.dispatchEventImpl(Container.java:2273) 
 at java.awt.Window.dispatchEventImpl(Window.java:2713) 
 at java.awt.Component.dispatchEvent(Component.java:4686) 
 at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707) 
 at java.awt.EventQueue.access$000(EventQueue.java:101) 
 at java.awt.EventQueue$3.run(EventQueue.java:666) 
 at java.awt.EventQueue$3.run(EventQueue.java:664) 
 at java.security.AccessController.doPrivileged(Native Method) 
 at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
 at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) 
 at java.awt.EventQueue$4.run(EventQueue.java:680) 
 at java.awt.EventQueue$4.run(EventQueue.java:678) 
 at java.security.AccessController.doPrivileged(Native Method) 
 at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
 at java.awt.EventQueue.dispatchEvent(EventQueue.java:677) 
 at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211) 
 at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128) 
 at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:121) 
 at java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:182) 
 at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:221) 
 at java.security.AccessController.doPrivileged(Native Method) 
 at java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:219) 
 at java.awt.Dialog.show(Dialog.java:1072) 
 at java.awt.Component.show(Component.java:1650) 
 at java.awt.Component.setVisible(Component.java:1602) 
 at java.awt.Window.setVisible(Window.java:1013) 
 at java.awt.Dialog.setVisible(Dialog.java:1003) 
 at launchertoast.Launch$11.run(Launch.java:602) 
 at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251) 
 at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:705) 
 at java.awt.EventQueue.access$000(EventQueue.java:101) 
 at java.awt.EventQueue$3.run(EventQueue.java:666) 
 at java.awt.EventQueue$3.run(EventQueue.java:664) 
 at java.security.AccessController.doPrivileged(Native Method) 
 at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
 at java.awt.EventQueue.dispatchEvent(EventQueue.java:675) 
 at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211) 
 at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128) 
 at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117) 
 at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113) 
 at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105) 
 at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)




:/
0