Ola pessoal, estou usando o runtime para gravar um db, como segue no codigo abaixo:
[code]rt.exec(“cmd.exe /k mysqldump -u” + box_Usuario.getSelectedItem() + " -p" + new String(pwd_Senha.getPassword()) + " " + box_BancoDeDados.getSelectedItem() + " > " + arquivo);
Thread.sleep(1000);
JOptionPane.showMessageDialog(null, “O Backup foi gerado com sucesso!”);
[/code]
O problema ai, é como voces veem, eu devo colocar um sleep necessario antes de mostrar o JOptionPane e acabar o metodo em que esse runtime esta executando…
Ou seja, um banco pequeno de 200 KB estou gerando, mas se fosse maior nao iria gerar…
Como faço para saber quando que o runtime acabou de executar o comando especificado nele?
Abraços
Acho que assim vai.
[code]Process p = rt.exec(“cmd.exe /k mysqldump -u” + box_Usuario.getSelectedItem() + " -p" + new String(pwd_Senha.getPassword()) + " " + box_BancoDeDados.getSelectedItem() + " > " + arquivo);
p.waitFor();
JOptionPane.showMessageDialog(null, “O Backup foi gerado com sucesso!”);[/code]
[code]long antes = System.currentTimeMillis();
Process process = rt.exec(“cmd.exe /k mysqldump -u” + box_Usuario.getSelectedItem() + " -p" + new String(pwd_Senha.getPassword()) + " " + box_BancoDeDados.getSelectedItem() + " > " + arquivo);
int returnCode = process.waitFor();
double tempo = (System.currentTimeMillis() - antes) / 1000.0;
JOptionPane.showMessageDialog(this, String.format(“O Backup foi gerado com sucesso em %.2f segundos!”, tempo));[/code]
PS: Aquele Thread.sleep foi um xunxão, hein?
PPS: Dessa vez o Erik foi mais rápido.
Bem lembrado. No caso do mysqldump, deveria mostrar a mensagem de sucesso se o retorno for 0.
O que estou fazendo de errado? Segue o meu metodo inteiro:
[code]//Seleciona local de destino
JFileChooser flc_CaminhoBackup = new JFileChooser();
flc_CaminhoBackup.setCurrentDirectory(new java.io.File("."));
flc_CaminhoBackup.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
flc_CaminhoBackup.setAcceptAllFileFilterUsed(false);
flc_CaminhoBackup.setDialogTitle(“Destino de Backup”);
flc_CaminhoBackup.showOpenDialog(flc_CaminhoBackup);
String caminhoProdutoSelecionado = flc_CaminhoBackup.getSelectedFile().getPath();
try {
String arquivo = caminhoProdutoSelecionado+ "/" +"banco.sql";
if(new File(arquivo).exists()){
//Deleta o arquivo caso o mesmo exista no diretorio
new File(arquivo).delete();
}
Runtime rt = Runtime.getRuntime();
Process p = rt.exec("cmd.exe /k mysqldump -u" + box_Usuario.getSelectedItem() + " -p" + new String(pwd_Senha.getPassword()) + " " + list_BancoDeDados.getSelectedValue() + " > " + arquivo);
StreamRedirector red = new StreamRedirector(System.out, p.getInputStream());
p.waitFor();
red.stopRedirect();
JOptionPane.showMessageDialog(null, "O Backup foi gerado com sucesso!");
} catch (Exception exc) {
exc.printStackTrace();
}[/code]
Ate o “rt.exec” funciona, pois o arquivo é criado normalmente.
Nao sei se o que eu estou fazendo é realmente isso, mas eu queria apenas saber quando ele tiver sido criado totalmente para depois poder mostrar o joptionpane…
Abraços
Não está fazendo nada de errado, aparentemente.
Mas o que está dando errado? Ocorre alguma exceção?
PS. Agora foi a vez do Vini ser mais rápido.
Outra coisa, por que você está chamando cmd.exe? Não era mais fácil chamar direto o mysqldump?
O que pode estar ocorrendo é ele esperar só o cmd.exe, e esse rodar num tempo diferente do mysqldump.
[quote=ViniGodoy]Outra coisa, por que você está chamando cmd.exe? Não era mais fácil chamar direto o mysqldump?
O que pode estar ocorrendo é ele esperar só o cmd.exe, e esse rodar num tempo diferente do mysqldump.[/quote]
Agora parou de travar mas ainda nao esta do jeito que quero hehe
Mas vou dar uma olhada novamente e caso nao funcionar, volto aqui…
Abraços