Visualizzazione dei risultati da 1 a 10 su 12

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    305
    Quote Originariamente inviata da LeleFT Visualizza il messaggio
    O, più semplicemente, quando il thread cattura l'eccezione, richiama un metodo dell'interfaccia grafica nel contesto dell'EDT, usando SwingUtilities.invokeLater()...


    Ciao.
    Non mi è chiara quest'ultima cosa. Ovvero invokeLater, richiede un oggetto Runnable. Non ho capito cosa intendi . potresti spiegarmelo per favore ?

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Quote Originariamente inviata da linux_r Visualizza il messaggio
    Non mi è chiara quest'ultima cosa. Ovvero invokeLater, richiede un oggetto Runnable. Non ho capito cosa intendi . potresti spiegarmelo per favore ?
    Una cosa del genere:

    codice:
    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            // operazioni da eseguire sulla UI
        }
    });
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    305
    Alternative??

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Quote Originariamente inviata da linux_r Visualizza il messaggio
    Alternative??
    Alternative? Se sei in un thread e devi comunicare qualcosa all'EDT, no. Quello è ed è piuttosto semplice.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    305
    Quote Originariamente inviata da Alex'87 Visualizza il messaggio
    Una cosa del genere:

    codice:
    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            // operazioni da eseguire sulla UI
        }
    });
    questa porzione di codice dovrebbe essere messa all'interno della catch esatto?
    Se invece devo restituire qualcosa all'edt?? Devo usare necessariamente SwingWorker? il problema è che la mia classe è composta da più metodi quindi dovrei creare più classi SwingWorker dove ognuna implementa un thread che richiama un metodo dell'istanza della mia classe che sarà condivisa implementando un pattern singleton.

  6. #6
    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

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