Threads

Bom dia Galera, gostaria mt que me ajudassem pois já tentei de tudo.
Tenho uma aplicação onde tenho dois botoes, importar e cancelar o envio do arquivo.
Estou usando thread depois que coloco ela no sleep , estou levando uma exception java.lang.IllegalThreadStateException: Thread is already started pois diz q já esta startada e nao posso ficar tentando fazer isso novamente.
Gostaria de saber como faço para que seja verificado a Thread em execução e de que modo resolvo as 4 possibilidades abaixo.Pq toda vez que eu clico no botão importar ele sempre chama o método run();
Obrigada!!!

[code]botaoImportar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
EventQueue.invokeLater(new Runnable() {
public void run() {
//Verificando se existe conteudo para importacao
if(jTextFieldNomeArquivo.getText().equals("") || jTextFieldNomeArquivo.getText().equals(null)){
JOptionPane.showMessageDialog(null, “Selecionar arquivo para importação”, “Arquivo”, JOptionPane.WARNING_MESSAGE);

					//Verifica se thread foi interrompida depois da importacao ter sido cancelada	 
					}else if(thread.isAlive() == true){							
						 thread.resume();
						 //thread.currentThread() 
						 //thread.join();
					
				   //importando pela primeira vez	
					}else{
      						progressBar = new JProgressBar();
	      					progressBar.setStringPainted(true);
	      					painelPrincipal.add(progressBar);
	      					painelPrincipal.add(botaoCancelar);
	      					thread.start();
					}
      				//importando  pela segunda vez sem cancelar
      			}
      		});
        	  
          }
        });         


    botaoCancelar.addActionListener(new java.awt.event.ActionListener() {
		public void actionPerformed(java.awt.event.ActionEvent e) {
        	  	    
        	    int response = JOptionPane.showConfirmDialog(null, "Deseja cancelar a importação", "Confirmação",
        	        JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
        	 if (response == JOptionPane.YES_OPTION) {  	        	    		        	    	 
        	    	    progressBar.setVisible(false);
        	    	 JOptionPane.showMessageDialog(null, "Processo Cancelado", "Cancelamento", JOptionPane.WARNING_MESSAGE);
					 thread.suspend();
					 botaoCancelar.setEnabled(false);
					
        	    } 	 
          }
        });         

private class ProgressRunnable implements Runnable {
public void run() {
try {
progressBar.setMinimum(0);
progressBar.setMaximum(100);
value = progressBar.getMinimum();
while (value <= progressBar.getMaximum()) {
EventQueue.invokeLater(new Runnable() {
public void run() {
progressBar.setValue(value++); //atualiza o valor da barra
}
});
Thread.sleep(50);

			}
		} catch (InterruptedException ex){
			ex.printStackTrace();
			JOptionPane.showMessageDialog(null, ex.getMessage(), "Erro", JOptionPane.ERROR);
		}	
		 JOptionPane.showMessageDialog(null, "Processo concluído com sucesso!", "Importação", JOptionPane.INFORMATION_MESSAGE);
		 botaoCancelar.setEnabled(false);
	}
	
}

[/code]

Thread.suspend e Thread.resume não devem ser usadas. O correto é você criar uma nova thread em vez de reaproveitar a mesma, ou então usar um java.util.concurrent.Executor, que lida com esses problemas de reaproveitar threads corretamente.

Obrigada pela resposta!!!
mas imagina que num periodo de 30 minutos o cara queira enviar 10 arquivos vou pra cada vez que ele importar terei que criar uma nova thread???
Como poderia ser resolvido ???

Criar uma nova thread é um processo um pouco caro, como você mesmo disse. Você pode usar o conceito de Executor do pacote java.util.concurrent para usar threads de um pool de threads, para reaproveitar threads.