Purtroppo non è ancora molto chiaro .... magari riporta del codice che potrebbe chiarire.
Comunque visto che parli di paintComponent, se fai del custom painting in un componente (es. JPanel), allora in generale è bene dire che il paintComponent deve essere il più breve ed efficiente possibile. In sostanza, vuol dire che nel paintComponent:
- non devi fare I/O (né su file e meno ancora su networking)
- non devi (continuamente) caricare immagini
- non devi fare sleep o altre operazioni potenzialmente bloccanti
(eventualmente si può caricare immagini/icone non troppo grandi in modo "lazy" cioè solo al primo paintComponent e poi ri-usarle).
Poi bisogna anche vedere in quale componente stai ridefinendo il paintComponent. Se è un JPanel, esso usa per default il double-buffering. Vuol dire che 2 disegni in sequenza NON li "vedi" distintamente nemmeno se in mezzo ci mettessi (per ipotesi) uno sleep di 1 secondo.
Ma il double-buffering c'è per un motivo ben preciso, per evitare i brutti effetti di flickering.