Originariamente inviato da Dreamer89
Il problema c'è ancora
Certo ... hai solo spostato più avanti nel tempo il problema. startServer() è velocissimo ... deposita solo nella coda dei task "da fare" il tuo Runnable. Il metodo actionPerformed termina subito, Swing fa quel che deve fare e ad un certo punto si accorge che c'è un Runnable da eseguire e lo esegue. Ma lì siamo al punto di prima.

Originariamente inviato da Dreamer89
ma non ho idea di come fare per non tener impegnato il thead... crearne un altro?
Bingo! Sì, devi eseguire il server e il suo loop in un thread a sé stante.

Originariamente inviato da Dreamer89
Ah, un'altra cosa, se eseguo Server senza utilizzare applet, cioè come un'applicazione normale, il programma non si blocca
Bisogna vedere cosa hai scritto per la applicazione .... ma se a seguito di un evento, nel actionPerformed fai la stessa identica cosa, si blocca certamente!