Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    JFrame - Jpane - JOptionPane variabili non salvate correttamente

    Salve forumiani! Sono nuovo di questo forum e anche molto fresco riguardante la programmazione.
    Sto cercando di creare un'applicazione che possa "loggare" un utente usando JFrame, JPane e JOptionPane, vi consiglio di copiare e incollare perché parlerò per righe.
    Nella prima parte (rig. 1 - 40) creo tanti utenti per provare le funzioni successive.
    Nella seconda parte (rig. 41 - 45) chiedo all'utente se è già registrato o meno.
    Se l'utente è già registrato anche se metto email e password corrette non mi entra mai nell'if rig. 47.
    Se l'utente è nuovo mi entra sempre nell'else rig. 58.
    Non capisco dove sta l'inghippo!

    codice:
    package applicazione;import java.awt.Color;
    import javax.swing.JFrame;
    import javax.swing.JOptionPane;
    import javax.swing.JPanel;
    public class Main {
    	public static void main(String[] args) {
    		JFrame app = new JFrame ("Applicazione di Alessandro");
    		JPanel background = new JPanel();
    		background.setBackground(Color.DARK_GRAY);
    		app.add(background);
    		app.setSize(500, 500);
    		app.setVisible(true);
    		Applicazione utenti = new Applicazione();
    		
    
    
    		String email;
    		String password;
    		Utente u1 = new Utente ("vincenzo@gmail.com" , "asdfghjkl");
    		Utente u2 = new Utente ("alessandro@gmail.com" , "abcdefg");
    		Utente u3 = new Utente ("francesco@gmail.com" , "password");
    		Utente u4 = new Utente ("nicola@gmail.com" , "alicebob");
    		Utente u5 = new Utente ("mario@gmail.com" , "marioPass");
    		utenti.nuovoUtente(u1);
    		utenti.nuovoUtente(u2);
    		utenti.nuovoUtente(u3);
    		utenti.nuovoUtente(u4);
    		utenti.nuovoUtente(u5);
    		u1.setNicknameUtente("Vinc99");
    		u2.setNicknameUtente("Ale38");
    		u3.setNicknameUtente("Frank");
    		u4.setNicknameUtente("Nico");
    		u5.setNicknameUtente("Rossi");
    		
    		String nickname;
    		boolean login = false;
    		int scelta;
    		Utente utente = new Utente();
    		
    		while(!login) {
    			scelta = JOptionPane.showConfirmDialog(background, "Sei registrato?");
    			email = JOptionPane.showInputDialog(background, "Inserisci email", "@gmail.com");
    			password = JOptionPane.showInputDialog(background, "Password: ");
    			utente.setEmailUtente(email);
    			utente.setPasswordUtente(password);
    			if(scelta == JOptionPane.YES_OPTION) { //Sign in
    				if(utenti.cercaUtente(utente) && utenti.password(utente)) { //Email corretta
    					JOptionPane.showMessageDialog(background, "Utente trovato!", "Caricamento completato", JOptionPane.INFORMATION_MESSAGE);
    					login = true;
    					break;
    				}
    				JOptionPane.showMessageDialog(background, "Questo account non esiste!", "Caricamento errato", JOptionPane.ERROR_MESSAGE);
    			}
    			else if(scelta == JOptionPane.NO_OPTION) { //Sign up
    				if(utenti.cercaUtente(utente)){ //Email già esistente
    					JOptionPane.showMessageDialog(background, "Questa email è stata già registrata!", "Errore!", JOptionPane.ERROR_MESSAGE);
    				}
    				else { //Email nuova
    					nickname = JOptionPane.showInputDialog(background, "Inserisci il nickname: ");
    					utente.setNicknameUtente(nickname);
    					login = true;
    					break;
    				}
    			}
    		}
    		
    		if(login) {
    			JOptionPane.showMessageDialog(background, "Loggin success!", utente.getNicknameUtente() , JOptionPane.INFORMATION_MESSAGE);
    			JOptionPane.showMessageDialog(background, utente, "Scheda personale" , JOptionPane.INFORMATION_MESSAGE);
    		}
    		else
    			JOptionPane.showMessageDialog(background, "Loggin failed!", "Errore!" , JOptionPane.ERROR_MESSAGE);
    		app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	}
    }
    codice:
    @Override
    	public int hashCode() {
    		return emailUtente.hashCode();
    	}

  2. #2
    Quote Originariamente inviata da NoNameoN Visualizza il messaggio
    Se l'utente è già registrato anche se metto email e password corrette non mi entra mai nell'if rig. 47.
    Se l'utente è nuovo mi entra sempre nell'else rig. 58.
    Direi che bisognerebbe vedere come è fatta quella classe Applicazione, ovvero quella che gestisce gli utenti.


    P.S. Comunque il fatto di aver scritto tutto quel codice direttamente nel main (quindi eseguito nel "main" thread) non è molto appropriato ma presumo non conosci ancora le questioni con il Event Dispatch Thread di Swing.
    AndreaSenior Java developerSCJP 5 (91%) – SCWCD 5 (94%)
    Il mio nuovo sito-blog italiano sulla programmazione: andbin.it

  3. #3
    *Non so citare*
    Si sono agli inizi di Swing... con precisione posso dirti che quello che ho fatto è il frutto della prima lezione introduttiva dell'argomento xD

    Applicazione.java
    codice:
    package applicazione;
    
    import java.util.HashMap;
    
    
    public class Applicazione {
    	
    	private HashMap<Utente, String> utenti = new HashMap<Utente, String>();
    	
    	public boolean nuovoUtente (Utente u) {
    		if(!utenti.containsKey(u)) {
    			utenti.put(u, u.getEmailUtente());
    			return true;
    		}
    		return false;
    	}
    	
    	public boolean cercaUtente (Utente u) {
    		if(utenti.containsKey(u))
    			return true;
    		else
    			return false;
    	}
    	
    	public boolean password (Utente u) {
    		for(Utente key : utenti.keySet())
    			if(utenti.get(u) == utenti.get(key)	&&
    					utenti.get(u.getPasswordUtente()).equals(utenti.get(key.getPasswordUtente())) )
    				return true;
    		return false;
    	}
    	
    }
    Utente.java
    codice:
    package applicazione;
    
    import java.util.HashMap;
    
    
    public class Applicazione {
    	
    	private HashMap<Utente, String> utenti = new HashMap<Utente, String>();
    	
    	public boolean nuovoUtente (Utente u) {
    		if(!utenti.containsKey(u)) {
    			utenti.put(u, u.getEmailUtente());
    			return true;
    		}
    		return false;
    	}
    	
    	public boolean cercaUtente (Utente u) {
    		if(utenti.containsKey(u))
    			return true;
    		else
    			return false;
    	}
    	
    	public boolean password (Utente u) {
    		for(Utente key : utenti.keySet())
    			if(utenti.get(u) == utenti.get(key)	&&
    					utenti.get(u.getPasswordUtente()).equals(utenti.get(key.getPasswordUtente())) )
    				return true;
    		return false;
    	}
    	
    }

  4. #4
    Quote Originariamente inviata da NoNameoN Visualizza il messaggio
    codice:
    	private HashMap<Utente, String> utenti = new HashMap<Utente, String>();
    Da quanto si deduce, hai usato oggetti Utente come "chiavi" della map. Questo implica che la classe Utente DEVE ridefinire correttamente sia equals(), sia hashCode(). E in modo appropriato in modo da garantire il "contratto" che esiste per definizione tra questi due metodi.

    Comunque l'approccio di usare oggetti Utente come chiavi non è particolarmente buono, sarebbe stato molto meglio usare:
    codice:
    	private HashMap<String, Utente> utenti = new HashMap<Utente, String>();

    Ovvero una mappa chiave:email, valore:Utente

    Quote Originariamente inviata da NoNameoN Visualizza il messaggio
    codice:
    			if(utenti.get(u) == utenti.get(key)
    Questo comunque è sbagliato, il contenuto delle stringhe (e degli oggetti in generale) NON si confronta con == ma con equals.
    AndreaSenior Java developerSCJP 5 (91%) – SCWCD 5 (94%)
    Il mio nuovo sito-blog italiano sulla programmazione: andbin.it

  5. #5
    Per quanto riguarda il primo punto ti dico che effettivamente è un ottima osservazione e ti ringrazio perché ne farò tesoro.

    Per quanto riguarda l'operatore == c'è da dire che vengo da C++ e ancora mi confondo xD grazie di tutto comunque.

    Credo sia questo l'errore. Come si chiudono le discussioni in questo forum? Metto [RISOLTO] a sinistra del titolo?

  6. #6
    Amministratore L'avatar di Vincent.Zeno
    Registrato dal
    May 2003
    residenza
    Emilia-Romagna (tortellini und cappelletti land!)
    Messaggi
    19,703
    Quote Originariamente inviata da NoNameoN Visualizza il messaggio
    Come si chiudono le discussioni in questo forum? Metto [RISOLTO] a sinistra del titolo?
    no, qui non usiamo chiuderle quando risolte

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2020 vBulletin Solutions, Inc. All rights reserved.