crear una aplicación de servidor que tenga GUI
-
28-10-2019 - |
Pregunta
Tengo que crear una aplicación que tenga una GUI. Mi aplicación tiene que funcionar como servidor. Cuando comienza, tiene que aceptar toda la conexión entrante y escribir la salida en un JTextArea. Mi problema es donde tengo que crear el ServerSocket ss = new ServerSocket(port_number)
y el método ss.accept
En la forma en que puedo aceptar conexiones. Traté de crear en el constructor principal de mi GUI pero siendo ServerSocket
unI/O
Solicite la GUI atascada. ¿Alguna idea para resolver la solución?
Creo en el constructor de mi GUI:
SwingUtilities.invokeLater(new Runnable(){public void run(){connection();}});
dónde connection()
es el método en el que creo el Serversocket y acepta la llamada
Solución
Debe crear un hilo separado para esperar/manejar las conexiones de red.
Cuando entra una nueva conexión, lea los datos y páselos al EDT para actualizar la GUI.
De esta manera, la GUI responderá.
Deberías leer sobre Patrón MVC hilos. Si Google hay una gran cantidad de artículos para estudiar
ACTUALIZAR:
Su código aquí está mal.
SwingUtilities.invokeLater(new Runnable(){public void run(){connection();}});
Estás manejando la conexión desde el hilo EDT.
Debe usar esto para actualizar la GUI y no llamar al código de E/S de la red.
Otros consejos
La lógica IO debe estar en (al menos un) hilo de fondo separado. Cada vez que se debe imprimir algo en el área de texto desde uno de esos hilos de fondo, debe hacerlo usando SwingUtilities.invokeLater()
, para asegurarse de que los componentes de swing solo se accedan desde el hilo de despacho de eventos.
Dicho esto, no creo que sea una muy buena idea tener una GUI para un servidor. ¿Por qué no escribe simplemente en un archivo de registro y usa ningún editor de texto para ver qué recibió el servidor? O escribir la GUI del servidor como cliente de este servidor?