O seu processamento está sendo executado no Event Dispatch Thread?
Caso afirmativo, você provavelmente não vai conseguir nem sequer incrementar sua barra de progresso.
Isso acontece porque os métodos de pintura são executados no mesmo Thread do seu processo. Ou seja, os métodos de pintura ficam na “fila” e somente depois que o seu processo acabar é que o thread vai estar livre para executa-los.
Se por outro lado, você executar sua operação lenta em um thread a parte, pode postar as operações de pintura no Event Dispatch Thread usando SwingUtilities.invokeLater(), e assim elas serão executadas quase que de imediato (dependendo do poder de processamento da máquina e de quão pesadas forem as operações dos outros threads concorrentes).
Creio que outra alternativa viável poderia ser o framework Foxtrot. Com ele você pode executar sua operação através de um método de uma classe estática chamada Worker que ele tem. Nesse caso, o framework se encarrega de despachar os eventos de pintura durante a sua operação (se não me engano).