Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 12 su 12

Hybrid View

  1. #1
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da linux_r Visualizza il messaggio
    questa porzione di codice dovrebbe essere messa all'interno della catch esatto?
    Tecnicamente ovunque nel contesto del tuo thread quando vuoi far eseguire "qualcosa" nel contesto del EDT.

    Quote Originariamente inviata da linux_r Visualizza il messaggio
    Se invece devo restituire qualcosa all'edt??
    Fa sempre parte di quel // operazioni da eseguire sulla UI
    Lì fai quello che vuoi con la UI, perché sei nel contesto del EDT.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    305
    Questa è la classe che si occupa del rapporto col server (ancora non del tutto completa):

    codice:
     
      package jcallremember.client;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.io.OutputStream;
    import java.net.InetAddress;
    import java.net.Socket;
    import java.net.UnknownHostException;
    import java.sql.ResultSet;
    import jcallremember.libreria.Credenziali;
    import jcallremember.libreria.Operazioni;
    
    
    /**
     *
    
    
     * Questa Classe implementa una connessione al server 
     */
    public class ClientConnection {
        private Socket socket;
        private InetAddress address;
        private OutputStream os;
        private InputStream is;
        private final int serverPort=40000;
        private Credenziali user_and_pass;
        /**
         * Verifica se l'oggetto è connesso a un server
         * @return true in caso affermativo , false altrimenti
         */
        public boolean isConnect(){
            return this.socket.isConnected();
        }
        /**
         * Invia al server le informazioni di login e si connette
         * @param login
         * @throws java.net.ConnectException
         * @throws UnknownHostException
         * @throws IOException 
         */
        public void connect(Credenziali login) 
                throws java.net.ConnectException,
                UnknownHostException, IOException{
            this.address=InetAddress.getLocalHost();
            this.socket=new Socket(address,this.serverPort);
            Boolean isConnect;
            this.os=this.socket.getOutputStream();
            this.is=this.socket.getInputStream();
            ObjectOutputStream obs = new ObjectOutputStream(this.os);
            obs.writeObject(login);
            obs.flush();
            ObjectInputStream ois = new ObjectInputStream(this.is);
            isConnect = ois.readBoolean();
            if(!isConnect){
                   throw new java.net.ConnectException("Username o Password"
                                + " inesatte!");
            }
            else  this.user_and_pass=login;
            
        }
            
               
        public ResultSet downloadImpegniDelGiorno() throws
                IOException, ClassNotFoundException{
            String query="Select * from Cliente where username= "+
                    this.user_and_pass.getUsername();
            ObjectOutputStream obs=new ObjectOutputStream(this.os);
            obs.writeObject(Operazioni.DOWNLOAD);
            obs.flush();
            obs.writeObject(query);
            obs.flush();
            ObjectInputStream ois=new ObjectInputStream(this.is);
            ResultSet rowdata=(ResultSet)ois.readObject();
            return rowdata;
        }
          
    }
    Questo è l'actionperformed relativo a un form (ancora non completo e senza gestione del problema
    dell'edt con l'I/O):
    codice:
    package jcallremember.client;
    
    
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.IOException;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    import javax.swing.JFormattedTextField;
    import javax.swing.JOptionPane;
    import javax.swing.JPasswordField;
    import jcallremember.libreria.Credenziali;
    /**
     * @author Pasquale Calorigero
     */
    public class LoginHandler implements ActionListener {
        private final JFormattedTextField Userfield;
        private final JPasswordField pwdField;
        public LoginHandler(JFormattedTextField Userfield,JPasswordField pwdField){
            this.Userfield=Userfield;
            this.pwdField=pwdField;
        }
        @Override
        public void actionPerformed(ActionEvent e) {
            //creo una connessione col Server
            String pass=new String(this.pwdField.getPassword());
            Credenziali login=new Credenziali(this.Userfield.getText(),
                   pass );
            
            try {
                 MyConnection.getInstance().connect(login);
                 MyConnection.getInstance().downloadImpegniDelGiorno();
                 new MainMenu().setup();
            }catch(java.net.ConnectException ex){
                JOptionPane.showMessageDialog(null, ex.getMessage(),"Errore"
                        , JOptionPane.ERROR_MESSAGE);
            }catch (IOException | ClassNotFoundException ex) {
                Logger.getLogger(LoginHandler.class.getName()).log(Level.SEVERE,
                        null, ex);
            }
        }
        
    }
    E infine Questo è lo swingworker che vorrei utilizzare nell'action performed onde evitare l'I/O
    (ancora non completo):
    codice:
    package jcallremember.client;
    
    
    import javax.swing.SwingWorker;
    import jcallremember.libreria.Credenziali;
    
    
    /**
     *
     * @author Pasquale Calorigero
     */
    public class SwingWorkerConnect extends SwingWorker <Void,Void> {
        private Credenziali login;
        public SwingWorkerConnect(Credenziali login){
            this.login=login;
        }
        
        @Override
        protected Void doInBackground() throws Exception {
            MyConnection.getInstance().connect(login);
            
            
        }
        
    }
    Questo è il singleton per la classe ClientConnection
    codice:
    
    package jcallremember.client;
    
    
    /**
     *
     * @author Pasquale Calorigero
     * Implementa il pattern Singleton 
     */
    public class MyConnection {
        private static ClientConnection connessione=null;
        
       private MyConnection(){};
       
        /**
         *
         * @return un istanza di ClientConnection connessa o meno a un server
         */
        public synchronized static ClientConnection getInstance(){
           if(MyConnection.connessione==null)
               connessione=new ClientConnection();
           return MyConnection.connessione;
       }
    }
    Che ne pensate?
    Inoltre mi chiedo quella throws sul metodo dobackground nella classe che estende swingworker, a chi rimanda la gestione dell'eccezione ?
    Dovrei far si che la gestione dell'eccezione venga rimandata all'interno dell'actionPerformed , come posso fare?
    Ultima modifica di linux_r; 10-04-2014 a 18:30

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 © 2026 vBulletin Solutions, Inc. All rights reserved.