Originariamente inviato da killerbomb
io ho fatto cosi ma non funziona:
Non ho letto tutto ma ho visto subito che è sbagliato (molto) concettualmente.
Vorresti fare una wait() nel mousePressed(). Questo è profondamente sbagliato. I metodi dei listener vengono invocati nel contesto del EDT, il event dispatch thread. Il thread che si occupa, tra le altre cose, di disegnare la interfaccia utente e di dispacciare gli eventi ai listener.
Questo thread non lo devi mai bloccare più di tanto. Altrimenti la tua interfaccia utente è "congelata". Ripeto: nel contesto del EDT non si dovrebbero mai fare sleep(), wait() o altro che possa bloccare, potenzialmente, per troppo tempo questo thread.

A parte questo, dal punto di vista tecnico, il wait() deve essere invocato su un oggetto di cui il thread corrente possiede il "lock". E nel tuo codice non vedo alcuna acquisizione di un lock.
E a parte questo l'uso di wait() generalmente va fatto dentro un ciclo while che testa una "precondition" che è quella che determina la condizione di wait o no.
Immagina una "coda" tale per cui chi legge, se non ci sono elementi, si blocca fino all'arrivo di almeno 1 elemento. La precondizione è appunto "se non ci sono elementi" allora metti in attesa. Ma va fatto in loop per questioni abbastanza fini che ora non sto a spiegarti e che centrano anche con il fatto che in base alla JVM ci potrebbero anche essere dei notify "spurii".

Non vorrei sembrarti scortese ... ci mancherebbe, ma queste cose, a questo livello, vanno studiate bene perché altrimenti rischi di fare cose profondamente sbagliate concettualmente, cose che magari funzionano 9 volte si e 1 no (per botta di sfortuna), o addirittura che non funzionano proprio mai o che non funzionano come vorresti.