O problema é que o seu metodo de impressão está na thread de tratamento de eventos ( a principal da sua aplicação ).
Dessa forma ela soh retorna depois que o seu metodo de impressão termina, assim sua aplicação fica sem serviços de eventos e desenho de tela.
Para resolver isso vc deve lançar uma thread separada para lidar com a impressão, assim :

 class CupomFiscal extends Thread{
       public void run(){
            try{
                 imprimeCupom();
            }catch( trata exceptions ... ){}
       }
 }

no seu programa :

 ......
 CupomFiscal cf = new CupomFiscal();
 cf.start(); // neste ponto o serviço de impressão irá iniciar-se de forma asíncrona ao resto do programa.
 .....

 É claro que se deve ter um conhecimento minimo de programação multi-thread, mas isso em Java não é problema.

As vezes tenho um problema que é seguinte:

1. tfCodigo.setText(""); // JtextField
2. imprimirCupomFiscal(); // Imprime um cupom fiscal

O problema é que a linha 2 é executada primeiro.
Como para imprimir o cupom, demora um certo tempo, a tela sem atualizar os dados.

Depois de imprimir o cupom que a tela é atualizada. Não sei, mas li algo parecido com isso para o repaint(), que possui uma prioridade muito baixa, e é executada no final do código.

Alguém sabe como eu posso resolver isso???
É muuuuuuuuito urgente isso

VLW pessoal