Domanda

Devo creare un'applicazione con una GUI. La mia applicazione deve funzionare come server. Quando inizia, deve accettare tutta la connessione in arrivo e scrivere l'output in una Jtextrea. Il mio problema è dove devo creare il ServerSocket ss = new ServerSocket(port_number) e il metodo ss.accept nel modo in cui posso accettare connessioni. Ho provato a creare nel costruttore principale della mia GUI ma essendo ServerSocket unI/O Richiedi la GUI STUCH. Qualche idea per risolvere la soluzione?

Creo nel costruttore della mia GUI:

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

dove connection() è il metodo in cui creo i server e accetta la chiamata

È stato utile?

Soluzione

È necessario creare un thread separato per attendere/gestire le connessioni di rete.

Quando arriva una nuova connessione a leggere i dati e passali all'EDT per aggiornare la GUI.

In questo modo la GUI sarà reattiva.

Dovresti leggere Pattern MVC Discussioni. Se tu Google c'è un'abbondanza di articoli da studiare

AGGIORNARE:

Il tuo codice qui è sbagliato.

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

Stai gestendo la connessione dal thread EDT.
Dovresti usarlo per aggiornare la GUI e non chiamare il codice I/O di rete.

Altri suggerimenti

La logica IO deve essere in (almeno uno) thread di sfondo separato. Ogni volta che qualcosa deve essere stampato sull'area di testo da uno di quei thread di sfondo, dovrebbero farlo usando SwingUtilities.invokeLater(), per assicurarsi che i componenti swing siano accessibili solo dal thread di spedizione eventi.

Detto questo, non penso che sia un'ottima idea avere una GUI per un server. Perché non scrivi semplicemente in un file di registro e usi qualsiasi editor di testo per vedere cosa ha ricevuto il server. Oppure scrivere la GUI del server come client di questo server?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top