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

¿Fue útil?

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?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top