Oppure

Loading
18/12/12 9:17
lello82
Ciao ragazzi,
vi prego di aiutarmi perchè sono nel pallone.Ho creato 2 programmi, un client ed un server.
Ma fanno delle cose pazze, alle volte il server mi parte, alle volte l'interfaccia grafica viene disegnata incompleta e non parte, alle volte non ricla l'indirizzo; altra cosa eclatante, quando si preme "CONNETTI" dal client, si avvia un secondo server oltre al primo (?????)

Il Client è un cronometro che è scritto in modo da poter registrare in futuro la data, l'identità dell'utente loggato il tempo di connessione su di un file esterno, txt o excel. il cronometro deve partire solo se la login inserita è corretta.
Il server, controlla i dati di login inviatagli dal client, e in caso affermativo risponde con un flag, che autorizza il client a far partire il cronometro, in caso contrario invia un flag per segnalare l'errore di login.

quando provavo l'algoritmo da cmd senza disegnargli interfaccia grafica i due programmi vanno bene e comunicano, ma ora che ho cominciato ad implementarci intorno una GUI swing stanno facendo delle cose pazze e non funzionano bene più, specie nelle comunicazioni di scrittura e lettura fra client e server.

vi prego aiutatemi è molto importante perche me l'hanno chiesto per lavoro ma non programmo in java da 2 anni, SONO BEN GRADITE MODIFICHE SOSTANZIALI SCRITTE PER ESTESO, dato che credo di aver scritto un pasticcio piu che un programma. GRAZIE!!
:-(

ecco le mie classi

P.S. scusate se il codice è sporchissimo di commenti e altri comandi superflui per le prove passate!!!


  
   import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;

    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.DataOutputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.io.PrintWriter;
    import java.net.Socket;
    import java.net.UnknownHostException;
    import java.util.Date;


    public class Cronometro{
        private JFrame frame;
        private JLabel labelTime;
        private JPanel panelButtons;
        private JButton buttonLogin;
        private JButton buttonLogout;
       JTextField username = new JTextField(15);
       JTextField password = new JTextField(15);
       JTextField telefono = new JTextField(6);
       JLabel status = new JLabel("Server Disconnesso");
       JLabel empty = new JLabel();
       JLabel title = new JLabel ("LudecaLog-In");
       JLabel nameLabel = new JLabel ("Nome Utente: ");
       JLabel passLabel = new JLabel ("Password: ");
       JLabel telLabel = new JLabel ("Telefono: ");
        private Timer timer;
        private long startTime;
       
        String rigaTesto;
       // DataInputStream in;
        BufferedReader in ;
        DataOutputStream  out;
        Socket clientSocket;

        public Cronometro ()
        {

          
            frame = new JFrame ("Cronometro");
            frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
            frame.setSize (500, 500);

            labelTime = new JLabel ("0:00:00.0");
            labelTime.setFont (new Font ("SansSerif", Font.BOLD, 30));
            labelTime.setHorizontalAlignment (JLabel.CENTER);

            buttonLogin = new JButton ("START");
            buttonLogout = new JButton ("STOP");
            buttonLogout.setEnabled (false);

          title.setForeground(Color.blue);
          title.setHorizontalAlignment(JLabel.CENTER);
          Font titleFont = new Font("Title", Font.CENTER_BASELINE, 50);
          title.setFont(titleFont);
          
          GridBagConstraints constr = new GridBagConstraints();
       
            panelButtons = new JPanel (new GridBagLayout());
           
            constr.gridx=0;
          constr.gridy=2;
          panelButtons.add(nameLabel,constr);
            constr.gridx=1;
          constr.gridy=2;
          panelButtons.add(username,constr);
          constr.gridx=0;
          constr.gridy=4;
          panelButtons.add(passLabel,constr);
          constr.gridx=1;
          constr.gridy=4;
          panelButtons.add(password,constr);
          constr.gridx=0;
          constr.gridy=5;
          panelButtons.add(telLabel,constr);
          constr.gridx=1;
          constr.gridy=5;
          telefono.setHorizontalAlignment(JLabel.LEFT);
          panelButtons.add(telefono,constr);
          constr.gridx=1;
          constr.gridy=8;
          panelButtons.add(empty,constr);
          constr.gridx=1;
          constr.gridy=9;
          panelButtons.add(status,constr);
          constr.gridx=0;
          constr.gridy=10;
            panelButtons.add (buttonLogin,constr);
           constr.gridx=2;
          constr.gridy=10;
           panelButtons.add (buttonLogout,constr);
          frame.setVisible(true);
          frame.add(title,BorderLayout.NORTH);
            frame.add (labelTime, BorderLayout.CENTER);
            frame.add (panelButtons, BorderLayout.SOUTH);
           

            timer = new Timer (50, new ActionListener () {
                public void actionPerformed (ActionEvent e) {
                    long diffTime = System.currentTimeMillis () - startTime;

                    int decSeconds = (int) (diffTime % 1000 / 100);
                    int seconds = (int) (diffTime / 1000 % 60);
                    int minutes = (int) (diffTime / 60000 % 60);
                    int hours = (int) (diffTime / 3600000);

                    String s = String.format ("%d:%02d:%02d.%d", hours, minutes,
                                              seconds, decSeconds);

                    labelTime.setText(s);

                }
            });



            buttonLogin.addActionListener (new ActionListener ()
            {
                public void actionPerformed (ActionEvent e)
                {
           
                /***************** 1 CONNESSIONE AL SERVER *******/
                          try {
                             clientSocket = new Socket("192.168.42.176",9910);
                             System.out.println("Connessione al Server in atto...");
                           
                             String loginOperatore = new String() ;
                             
                                  loginOperatore=(username.getText()+password.getText()+telefono.getText());
                             
                             //apertura stream di input
                              InputStreamReader isr=new InputStreamReader(clientSocket.getInputStream());
                              BufferedReader in=new BufferedReader(isr);
                              
                              //apertura stream di output
                              OutputStreamWriter osw=new OutputStreamWriter(clientSocket.getOutputStream());
                              BufferedWriter bw=new BufferedWriter(osw);
                              PrintWriter out=new PrintWriter(bw,true);
                              
                              //invio della stringa al server
                              out.println(loginOperatore.toString());
                              status.setText("Connesso al Server, controllo la Login");
                              
                              
                              String confermaLogin = new String();
                              System.out.println(confermaLogin=in.readLine());
                              System.out.println("ciao----->"+(confermaLogin));
                              if(confermaLogin.equals("OK"))
                              {
                                 //if (clientSocket != null && out != null && in != null) {
                                   Tempo tempo = new Tempo();
                                 final Date data = tempo.dataCompleta;
                                 startTime = System.currentTimeMillis();
                                    timer.start();
                                    buttonLogin.setEnabled(false);
                                    buttonLogout.setEnabled(true);                      
                                 status.setText("<html>Log In Effettuato con Successo! <br>Data e Ora:<br>"+ data+"</html>");
                                         
                          // }   
                              }
                              else if (confermaLogin.equals("DATI_ERRATI"))
                              {
                                 status.setText("ERRORE!!! Dati di Log-In Errata!!");
                                  
                              }
                              
                            
                  
                              //chiusura della socket e degli stream
                              clientSocket.close();
                              in.close();
                              bw.close();
                              out.close();                                
                         
                          }
                          catch (UnknownHostException err)
                          {
                               System.err.println("Errore: probelmi di comunicazione");
                           }
                          catch (IOException err1)
                          {
                               System.err.println("Errore: probelmi di comunicazione");
                           }
                 
                          /******************************** 1 FINE CONNESSIONE AL SERVER *******/
                }
            });

            buttonLogout.addActionListener (new ActionListener () {
                public void actionPerformed (ActionEvent e)
                {
                        timer.stop ();
                        buttonLogin.setEnabled (true);
                        buttonLogout.setEnabled (false);
                      Tempo tempo = new Tempo();
                      final Date data = tempo.dataCompleta;
                      status.setText("<html>Log Out Effettuato con Successo! <br>Data e Ora:<br>"+ data+"</html>");
                      
                }
            });
           
            frame.setVisible (true);
        }
       
       

        public static void main (String[] args)
        {
           SwingUtilities.invokeLater (new Runnable()
                                  {
                                      public void run()
                                      {
                                     new Cronometro();
                                  }
                                });
        }
    }



    import java.util.Calendar;
    import java.util.Date;
    import java.util.GregorianCalendar;


    public class Tempo{
              public int ore,minuti,secondi,giorno,mese,anno;
              public long dataMillis;
              public Date dataCompleta = new Date();

             //costruttore di default
             public Tempo(){         

               GregorianCalendar c =new GregorianCalendar();
               dataCompleta=c.getTime();
               dataMillis=c.getTimeInMillis()/* / (24*60*60*1000)*/;
                ore=c.get(Calendar.HOUR_OF_DAY);
                minuti=c.get(Calendar.MINUTE);
                secondi=c.get(Calendar.SECOND);
                giorno=c.get(Calendar.DAY_OF_MONTH);
                mese=c.get(Calendar.MONTH);
                anno=c.get(Calendar.YEAR);

               
             }//Tempo
       }//tempo




--- PROGETTO SERVER ---

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;

    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.DataOutputStream;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.io.PrintWriter;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.net.UnknownHostException;
    import java.util.Date;


    public class provaServer{
       
        private JFrame frame;
        private JPanel panelButtons;
        private JPanel panelSchermiTitolo;
         
        private JButton buttonConnetti;
        private JButton buttonDisconnetti;
        private JButton buttonSalvaFile;
        private JButton buttonAggiornaSchermi;
        private JButton buttonCreaLogin;
        private TextArea schermoOperatori;
        private TextArea schermoNotifiche;
       
       JTextField username = new JTextField(15);
       JTextField password = new JTextField(15);
       JTextField telefono = new JTextField(6);
        JLabel status = new JLabel("Server Disconnesso");
       JLabel empty = new JLabel();
       JLabel title = new JLabel ("LudecaLog-In Server");

       
        String rigaTesto;
       // DataInputStream in;
        BufferedReader in ;
        DataOutputStream  out;


       


        public provaServer ()
        {
     

         try {
             Socket clientSocket=null;
            ServerSocket serverSocket=null;
                serverSocket = new ServerSocket(9910);
                clientSocket = serverSocket.accept();
                System.out.println("Server: Sono attivo sulla Rete ");
                //serverSocket.setReuseAddress(true);
                                 
                status.setText("Il Server è adesso Attivo sulla Rete");
               
                BufferedReader in= new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
                //Stream di output
                DataOutputStream out=new DataOutputStream(clientSocket.getOutputStream());
                String loginOperatore = new String();
                loginOperatore=in.readLine();
                System.out.println("cronServer:---->"+loginOperatore);
                Operatore operatore = new Operatore();
                if(operatore.controllaLogin(loginOperatore)==true)
                {
                   out.writeBytes("OK");
                }
                else
                {
                   out.writeBytes("DATI_ERRATI");
                }
               
                System.out.println("Server: Sono attivo sulla Rete ");
                serverSocket.setReuseAddress(true);               
                status.setText("Il Server è adesso Attivo sulla Rete");
           
             }
             catch (IOException e1) {
                System.out.println(e1);
                System.out.println("Server: Non riesco ad aprire il socket");
             }
           

           
            frame = new JFrame ("CronometroServer");
            frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
            frame.setSize (500, 500);

            //TEXT AREA
            //labelTime = new JLabel ("0:00:00.0");
            //labelTime.setFont (new Font ("SansSerif", Font.BOLD, 30));
           
            //labelTime.setHorizontalAlignment (JLabel.CENTER);

            buttonSalvaFile = new JButton ("SALVA FILE");
            buttonCreaLogin = new JButton ("CREA LOGIN");
            buttonAggiornaSchermi = new JButton ("AGGIORNA");
            buttonConnetti = new JButton ("CONNETTI");
            buttonDisconnetti = new JButton ("DISCONNETTI");
            //buttonSalvaFile.setEnabled (false);
            //buttonCreaLogin.setEnabled (false);
            //buttonAggiornaSchermi.setEnabled (false);
            //buttonDisconnetti.setEnabled (false);
           
            schermoOperatori = new TextArea();
            schermoNotifiche = new TextArea();
            schermoOperatori.setEnabled(false);
            schermoNotifiche.setEnabled(false);

          title.setForeground(Color.blue);
          title.setHorizontalAlignment(JLabel.CENTER);
          Font titleFont = new Font("Title", Font.CENTER_BASELINE, 45);
          title.setFont(titleFont);
          
          GridBagConstraints constr = new GridBagConstraints();
       
            panelButtons = new JPanel (new GridBagLayout());
            panelSchermiTitolo = new JPanel (new GridBagLayout());
           
          constr.gridx=0;
          constr.gridy=1;
          panelSchermiTitolo.add(title,constr);
          constr.gridx=0;
          constr.gridy=2;
          panelSchermiTitolo.add(schermoOperatori,constr);
          constr.gridx=0;
          constr.gridy=3;
          panelSchermiTitolo.add(schermoNotifiche,constr);
          constr.gridx=0;
          constr.gridy=4;
          panelSchermiTitolo.add(status,constr);
           constr.gridx=2;
          constr.gridy=0;
           panelButtons.add (buttonDisconnetti,constr);
           constr.gridx=3;
          constr.gridy=0;
           panelButtons.add (buttonAggiornaSchermi,constr);
           constr.gridx=4;
          constr.gridy=0;
           panelButtons.add (buttonSalvaFile,constr);
           constr.gridx=5;
           constr.gridy=0;
           panelButtons.add (buttonCreaLogin,constr);
          

          frame.add(title,BorderLayout.NORTH);
            frame.add (panelButtons, BorderLayout.SOUTH);
            frame.add (panelSchermiTitolo, BorderLayout.CENTER);
            frame.setVisible(true);

       
            buttonConnetti.addActionListener (new ActionListener()
            {
                public void actionPerformed (ActionEvent e)
                {

                 
               }
            });

            buttonDisconnetti.addActionListener (new ActionListener () {
                public void actionPerformed (ActionEvent e)
                {
                    try {
                   clientSocket.close();
                       in.close();
                       out.close(); 
                } catch (IOException e1) {
                   // TODO Auto-generated catch block
                   e1.printStackTrace();
                }

                   
                }
            });
           
            frame.setVisible(true);       
        }

        public static void main (String[] args)
        {

           SwingUtilities.invokeLater (new Runnable()
                                  {
                                      public void run()
                                      {
                                     new provaServer();
                                  }
                                });
           
           
           
        }
    }



    public class Operatore {
       
       private String identificatoreLogin = new String ();
       
       public Operatore()
       {
          identificatoreLogin="rafgrav1106";

       }
       
       public boolean controllaLogin(String loginInserita)
       {
       
             System.out.println("oper: "+identificatoreLogin);
                System.out.println("oper:" +loginInserita);
          if(loginInserita.equals(identificatoreLogin))
          {
             return true;
          }
          else
          {
             return false;
          }
          
       }
       
       public String getIdentificatoreLogin() {
          return identificatoreLogin;
       }
       
       public void setIdentificatoreLogin(String identificatoreLogin)
       {
          this.identificatoreLogin=identificatoreLogin;   
       }

       
    }

aaa
15/01/13 12:02
carmelolg
Ciao,
se via console funziona, ma i problemi li hai avuti a partire dall'implementazione GUI io credo che dovresti andare a controllare il codice che è all'interno dei paintCompontent(Grafics g).
Ricorda che le swing in Java generano thread, che alle volte possono creare non pochi casini come ad esempio loop.
Avvia in debug, partendo da un punto prima rispetto a quando ti si impalla la grafica. E vedi dove si intoppa.
Non ti da nessun errore in console?
aaa