SWT Travado

4 respostas
castiel

Olá,
tenho o seguinte problema, tenho uma aplicação em SWT que tenho que processar um arquivo de texto e salvar em SQL,
tudo isso já está funcionando, o problema é o seguinte, como o arquivo tem mais de 3000 linhas até eu valida-lo e
salva-lo esta operação demora uns 40 segundos, durante esse tempo o SWT fica travado ou não responde.
Tentei usar uma thread para executar essa operação, mais não adiantou a aplicação fica travada.

Alguma dica para destravar a aplicação enquanto executo a atualização no banco?

Segue abaixo meu código:

//Listener do botão importar.
btImport.addSelectionListener(new SelectionAdapter() {
			public void widgetSelected(SelectionEvent e) {
				importador = new Importador(txConn.getText(), txPath.getText(), txArea, Integer.valueOf(txConta.getText()));
				Thread t1 = new Thread(importador);
				t1.run();
			}
		});
// Imports ...
public class Importador implements Runnable{

// Objetos e métodos... 

// minha implementação do run()
@Override
	public void run() {
		try {
		mensagens = new String();
		insertText("Iniciando...");
		Thread.sleep(1000);
		connect();
		validador = new Validador(conn, filePath);
		insertText("Validando arquivo, aguarde...");
                //Método demorado
		if(validador.isValid()) {
			insertText(validador.getMensagens());
			insertText("Validação concluida!");
			insertText("Gravando lotes, aguarde...");
			salvar(); //Método demorado
			insertText("Lotes Salvos!");
			insertText("Integrando lotes, aguarde...");
			integrarLotes(); //Método demorado
			insertText("Integração concluida!");
			disconnect();
		} else {
			insertText(validador.getMensagens());
			disconnect();
		}
		} catch (SQLException sqlE) {
			insertText(sqlE.getMessage());
		} catch (IOException ioE) {
			insertText(ioE.getMessage());
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
}

4 Respostas

Ataxexe

De início, em vez de t1.run(), use t1.start().

castiel

Ataxexe t1.start() funcionou,
agora minha aplicação continua funcionando enquanto processa minha Thread.
Só dá erro quando vai atualizar o meu Text, se não atualizar ele, roda normal.

Ataxexe

Aí você precisa dar uma olhada nas particularidades do SWT. O Swing, por exemplo, precisa que as atualizações gráficas sejam feitas em sua thread dedicada, talvez o SWT funcione da mesma forma.

castiel

Consegui executar a atualização do SWT de por outra classe, tenho que pegar o Display.getDefault().aSyncExec()
dai ele me permite atualizar.

Criado 21 de outubro de 2010
Ultima resposta 25 de out. de 2010
Respostas 4
Participantes 2