Isto que pisca é comumente chamado de flickering, que é quando a tela pisca mesmo, só que com nome bonitinho.
Você pode eliminar isto usando uma técnica simples de double buffer, que consiste em desenhar a imagem antes em um buffer fora da tela e depois desenhar este buffer inteiro na janela da sua applet.
Para isso, você pode usar um Image:
// declare como atributo da classe
BufferedImage buffer;
//no método de inicialização, você cria a imagem
buffer = new BufferedImage(tamanhoX, tamanhoY);
// no paint
...
Graphics gBuffer = buffer.getGraphics();
// limpa e escreve o texto no *** gBuffer ***
...
// libera o gBuffer
gBuffer.dispose();
// desenha na applet
g.drawImage(buffer, 0, 0, null);
Novamente, este código não foi testado, mas provavelmente vai funcionar…
A partir do Java 1.4, os componentes Swing (não sei dos Awt) já vem com um método chamado createBufferStrategies(), que pode ser usado para se conseguir double buffering ou page flipping facilmente.
Page flipping é quando você desenha fora da tela, como no double buffering, mas ao invés de copiar o que está fora da tela para ela, a placa de vídeo simplesmente passa a mostrar o conteúdo daquela região da memória. O “ponteiro” que representa o endereço inicial da tela é alterado. Mas isto só em tela cheia, coisa que applets não são…
Entretanto, para se usar estes métodos novos, eu não tenho certeza, mas acho que não é usado no método paint(), e sim nesse caso no run() (ou outro método que você crie para desenhar)… mas isto não estou certo… teria que fazer o teste mesmo.
Falou 