Pues estoy programando un chat a través de Sockets usando Netbeans, en el que tengo por un lado en un paquete, la clase Servidor, y en otro paquete la clase Cliente. En principio el programa funciona bien, cada paquete tiene sus respectivas clases con sus métodos de envío y recepción de mensaje, cada uno con su clase principal en el que tienen bien definida la IP y los puertos para conectarse.

Si ejecuto el servidor, y luego el cliente por separado, todo funciona perfecto (tal y como se ve en la imagen). El problema surge cuando quiero crear un panel principal con dos botones, (Servidor y Cliente), de modo que cuando pulso el botón servidor, que se me abra la ventana del servidor, y después si pulso el botón cliente, que me aparezca la ventana del cliente. Para eso utilizo el código de siempre para invocar otras clases:
private void btnServidorActionPerformed(java.awt.event.ActionEvent evt) {
PrincipalChatS verS=new PrincipalChatS();
//La primera línea es para asignarle la acción al botón del Servidor (llamado btnServidor). La segunda línea sirve para invocar la clase.
Con este código consigo (aunque parcialmente) mi objetivo, y cuando pulso el botón servidor me aparece la ventana del servidor, y lo mismo me pasa con el cliente, el problema es que no funcionan. Como se ve en la siguiente imagen:

Aquí dejo el código de la interfaz del Servidor (con el nombre de clase “PrincipalChatS”). He marcado en rojo la parte donde hago el Listen

Y para el cliente el código donde pongo el listen es este:

Al lado del código pongo para que pongo cada cosa, para que se vea más o menos para que es cada parte del código.
Pero el problema es ese. Al invocarlos desde otra clase, no funcionan.
¿por qué no funcionan cuando los invoco, y en cambio sí me funcionan si los ejecuto directamente, si el código es el mismo?