Capisco ... ma un minimo di "tecnicismo" ci vuole ... dopotutto siamo in una sezione sulla programmazione Java ... non sui programmi televisivi.Originariamente inviato da esploratore8
Scusa potresti usare un linguaggio meno tecnico questo codice non l'ho realizzato da solo sono un apprendista certe cosa ancora non le so.![]()
A parte le questioni di cui hai chiesto, ci sono altre questioni riguardo il tuo codice che bisognerebbe chiarire e affrontare. Non ne ho parlato prima perché sono questioni che riguardano sia il "design" delle tue classi, sia argomenti più avanzati sui thread e la "concorrenza".
Una cosa che salta subito all'occhio è che hai invocato un repaint() dentro il paintComponent(). Bene, già questa è una pessima cosa che non si dovrebbe fare!!
E se invece arriviamo alle questioni sui thread: in Characters il run() viene eseguito in un thread a sé stante. In questo run si usa e si aggiorna la variabile y. Tale variabile viene usata anche dal draw(), che viene eseguito nel contesto di un altro thread (il EDT, event dispatch thread ... quello dedicato alla interfaccia utente). Nel mondo "ideale" aggiornando una variabile condivisa da un thread X, il nuovo valore viene visto subito dopo sempre correttamente da un altro thread Y. Nel mondo reale no ... ci sono questioni delicate di sincronizzazione. Quella variabile 'y' bisognerebbe dichiararla 'volatile' (che nel tuo caso sarebbe sufficiente) oppure usare una apposita sincronizzazione.
Insomma ... bisognerebbe ripensare un po' bene il tutto. Capisco che per te non sia facile ... ma è così.