Experimente usar uma variável privada normal. Se usar uma estática, ao criar um novo SwingWorker e atribui-lo à variável estática, o SwingWorker ao qual ela se referia anteriormente não poderá mais ser acessado, e portanto você não terá como cancelá-lo.
Cara, avancei um pouco.
Criei a variável normal e uma classe extendendo a SwingWorker. Mas continuou o erro. Então, coloquei um if no método que chamo dentro do worker para não montar um JTable que mando preencher.
E funcionou, a tabela não está sendo preenchida, mas o worker continua rodando. Então descobri o que era, é o select que faço no banco que continua rodando. Parece que o SwingWorker não cancela a query que mandei gerar.
Você sabe que tem algum modo de interromper uma query select?
Você pode usar Statement.cancel():
http://java.sun.com/javase/6/docs/api/java/sql/Statement.html#cancel()