Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    561

    Problema nella realizzazione di un server

    Sto realizzando un server socket.
    Adesso questo server ha un'interfaccia grafica (GUI). Nella GUI tra le altre cose c'è un pulsante Configure attraverso cui è possibile modificare la porta e altre cose.
    Quando viene modificata la porta io vorrei ricreare una nuova server socket su quella porta.

    Adesso nel progetto ho una classe GUI dove c'è l'interfaccia, una classe Main dove c'è il mai dell'intera applicazione, una classe server dove c'è il metodo Start() che fa partire il server e poi la classe Configure con l'interfaccia del pulsante Configure.

    Quando l'utente fa la modifica sulla porta io non faccio altro che stoppare il server attuale chiamando il metodo Stop() e richiamo il metodo Start() della classe server.
    Il problema è che il server parte però l'interfaccia grafica (ossia la GUI) si blocca e l'aspetto grafico si rovina


    tulipan

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    561
    ho provato a modificare il codice della maschera Configure in questo modo:

    codice:
            FileConfig f=new FileConfig();
           f.setPort(Integer.parseInt(jTextField12.getText()));
            if (frame.getMain().getServer() !=null && !(frame.getMain().getServer().getPort()==Integer.parseInt(jTextField12.getText()))){
                   //annulla la socket attiva e ne ricrea un'altra
                   f.writeProperties();
                   
                   frame.getMain().getServer().Stop();
                   frame.getMain().getServer().setPort(Integer.parseInt(jTextField12.getText()));
                    f.setPath(jTextField11.getText());
                     f.setIDShip(Byte.parseByte(jTextField1.getText()));
                     f.writeProperties();
                     String[] args=new String[]{};
                     Main.main(args);
                      System.out.println("4");
                      this.dispose();
            }
           
           f.setPath(jTextField11.getText());
           
           f.setIDShip(Byte.parseByte(jTextField1.getText()));
          
           f.writeProperties();
          
           JOptionPane.showMessageDialog(this,"Changes made correctly");

    il server parte ma l'interfaccia grafica non viene creata correttamente e si blocca



    tulipan

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da tulipan
    String[] args=new String[]{};
    Main.main(args);
    Questo main() è .... quello che sto pensando io??? Cioè il metodo main statico per l'avvio della applicazione???
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    561
    si è proprio quello

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da tulipan
    si è proprio quello
    AAArrrrrgh! VVoVe:
    Ma non si fanno cose del genere!

    Purtroppo, come al solito, si tratta di un cattivo design.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    561
    e come dovrei impostare la cosa?


    tulipan

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    561
    Ho provato a crearmi una nuova classe che fa le stesse cose della classe Main ma l'interfaccia di nuovo non viene costruita bene ed inoltre si blocca.



    tulipan

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da tulipan
    Ho provato a crearmi una nuova classe che fa le stesse cose della classe Main ma l'interfaccia di nuovo non viene costruita bene ed inoltre si blocca.
    Giusto per chiarire, la gestione del ServerSocket e il tipico loop con la accept() vanno fatti in un thread a parte a sé stante.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    561
    infatti io la gestione della socket la faccio nella classe Server e precisamente nel metodo Start() vado a fare il loop che dici.....il problema è che siccome la classe Server utilizza la GUI per poter scrivere dei messaggi nella TextArea....devo per forza di cose chiudere la GUI attuale e aprirne una nuova ..questo lo faccio in una classe chiamata REMain(chiamata così perchè fa le stesse di cose di Main)




    tulipan

  10. #10
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    561
    Ho aggiustato un po le cose e nella classe Configure dove effettuo la modifica alla porta ho scritto questo codice:

    codice:
             FileConfig f=new FileConfig();
             f.setPort(Integer.parseInt(jTextField12.getText()));
            if (frame.getMain().getServer() !=null && !(frame.getMain().getServer().getPort()==Integer.parseInt(jTextField12.getText()))){
                   //annulla la socket attiva e ne ricrea un'altra
                   f.writeProperties();
                   frame.getMain().getServer().Stop();
                   Server server=new Server(Integer.parseInt(jTextField12.getText()),frame);
                try{
                     
                   server.setConfigure(this);
                   server.setGUI(frame);
                   server.Start();
    
                   f.setPath(jTextField11.getText());
                   f.setIDShip(Byte.parseByte(jTextField1.getText()));
                   f.writeProperties();
                   this.dispose();
                 }catch(IOException ioe)
                 {
                     
                 }
           }
           
           f.setPath(jTextField11.getText());
           
           f.setIDShip(Byte.parseByte(jTextField1.getText()));
          
           f.writeProperties();
          
           JOptionPane.showMessageDialog(this,"Changes made correctly");
    come si puo vedere nella classe Server dove creo la ServerSocket ho messo una GUI , allora quando mi creo il nuovo oggetto server (sulla nuova porta) inizializzo tale GUI.

    ma stranamente anche così la GUI si blocca e si rovina.


    tulipan

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.