RESOLVIDO - Executar comando DOS um a um

Então pessoal estou com um problema, acho que simples mas, não sei como resolver.
Tenho uma classe que gera alguns comandos DOS, para fazer backup e algumas outras funções do firebird. Um dos metodos deve executar varios comandos, porem, um comando só poderá iniciar quando o anterior acabar. Por exemplo, o restore só pode iniciar quando acabar o backup.
Usando a classe runtime ele executa todos os comandos que passo de uma vez:

try
        {
            Runtime.getRuntime().exec("rundll32 SHELL32.DLL,ShellExec_RunDLL "+comando);
        }
        catch (IOException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }

Se eu usar a runtime com um array de strings ele está retornado um erro 123, algum erro de IO.
Alguem tem alguma ideia de como posso fazer para, que cada comando só seja iniciado quando o anterior tiver sido processado?
Obrigado.

se eu entendi o que vc quer fazer, não seria o caso de - literalmente - executar bloco por bloco, cada um com um comando? assim não funciona mesmo?

não sei se, neste caso, rola algum tipo de instrução semelhante ao ‘break’… :roll:

[quote=pcassiano]se eu entendi o que vc quer fazer, não seria o caso de - literalmente - executar bloco por bloco, cada um com um comando? assim não funciona mesmo?

não sei se, neste caso, rola algum tipo de instrução semelhante ao ‘break’… :roll: [/quote]

Bloco por bloco, vc diz, enviar uma instrução, depois outra e assim sucessivamente? Se sim, assim não funciona, ja tentei.
Tentei usar o metodo wait() da classe Process mas, ele espera que o comando inicie apenas, não espera que ele termine, portanto, tambem não resolveu o problema. Acho que vou fazer um .bat. A desvantagem do .bat é que futuramente ele não vai resolver todos meus problemas. Então se alguem tiver alguma ideia vai ser muito util.

Boa tarde a todos.

Que tal dar uma olhadinha neste link.

http://www.guj.com.br/posts/list/46795.java.

As vezes as respostas para os nossos problemas estão no próprio Site do GUJ. É só procurar.

[quote=discorpio]Boa tarde a todos.

Que tal dar uma olhadinha neste link.

http://www.guj.com.br/posts/list/46795.java.

As vezes as respostas para os nossos problemas estão no próprio Site do GUJ. É só procurar.[/quote]

Eu ja havia passado por esse post, o que eles sugerem lá é exatamente o que estou fazendo, e não atende minhas necessidades. Como disse anteriormente, necessito de um processo seja iniciado apenas, quando o processo anterior ja esteja completo.
No momento estou usando um .bat como gambiarra mas, preciso resolver isto. Ainda não achei uma solução adequada.

Tenta assim !
cria arquivo um arq1.txt = nao
cria arquivo um arq2.txt = nao
cria arquivo um arq3.txt = nao

exemplo: while { } … etc

entao processo1
arq1.txt = sim

se arq1.txt = sim
executa processo2

se arq2.txt = sim
executa processo3

ai por diante …

[quote=Lindberg]Tenta assim !
cria arquivo um arq1.txt = nao
cria arquivo um arq2.txt = nao
cria arquivo um arq3.txt = nao

exemplo: while { } … etc

entao processo1
arq1.txt = sim

se arq1.txt = sim
executa processo2

se arq2.txt = sim
executa processo3

ai por diante …
[/quote]

Então cara, não entendi bem sua dica. Mas, meu problema mesmo é o seguinte: não sei como saber que o comando DOS terminou. Eu sei que a chamada do comando terminou. Por exemplo, chamar o programa de backup, eu consigo saber que o programa de backup inicio o backup mas, não sei qnd o programa de backup terminou o backup. Esse é problema, saber qnd acabou o backup.

vou criar um script aqui … posto depois

Funcionando …

  • Basta criar seu .BAT ou .SH

  • A LINHA QUE EXECUTA O COMANDO DOS OU SHELL, ESPERA QUE O PROCESSAMENTO SEJA TERMINADO
    PARA INICIAR OUTRO .BAT.

  • TESTEI NO WINDOWS XP, FAZ UM TESTE AI E ME FALA

  • NAO ESQUECE DE COLOCAR A "Imagens/logo1.jpg" NA PASTA.


import javax.swing.JPanel;
import javax.swing.JProgressBar;

import java.awt.Color;
import java.awt.Frame;
import java.awt.BorderLayout;
import javax.swing.JWindow;

import javax.swing.*;

import java.util.Date;
import java.text.SimpleDateFormat;
import java.io.File;

import java.io.;
import java.text.
;
import javax.swing.*;

public class Processar extends JWindow {

private JProgressBar barra =new JProgressBar(0,100);
private javax.swing.JPanel Painel;

private javax.swing.JLabel jLabel1;
private javax.swing.JProgressBar Barra2;

private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JLabel jLabel6;
private javax.swing.JLabel jLabelg;

public boolean arquivosok = false;

public java.sql.Connection conex;
public String usux="";
public String senx="";
public String dptox="";
public String servw = "ubuntu";

public Processar() {

  java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
  setBounds(0, 0, screenSize.width, screenSize.height-23);

  Painel = new javax.swing.JPanel();
  jLabel1 = new javax.swing.JLabel();
  barra = new javax.swing.JProgressBar();
  Barra2 = new javax.swing.JProgressBar();
  jLabel2 = new javax.swing.JLabel();
  jLabel3 = new javax.swing.JLabel();
  jLabel4 = new javax.swing.JLabel();
  jLabel5 = new javax.swing.JLabel();
  jLabel6 = new javax.swing.JLabel();
  jLabelg = new javax.swing.JLabel();


 
  Painel.setLayout(null);

  Painel.setBackground(java.awt.Color.black);  
  jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("Imagens/logo1.jpg")));  
  Painel.add(jLabel1);
  jLabel1.setBounds(31, 50, 290, 240);


  Painel.add(barra);
  barra.setBounds(30, 300, 290, 16);
  barra.setMaximum(100);
  barra.setStringPainted(true);
  

  Painel.add(Barra2);
  Barra2.setBounds(30, 20, 290, 16);


  jLabel2.setFont(new java.awt.Font("Arial", 0, 16));
  jLabel2.setText("Ola, O Sistema esta verificando");
  jLabel2.setForeground(Color.white);
  Painel.add(jLabel2);
  jLabel2.setBounds(350, 50, 390, 20);

  jLabel3.setFont(new java.awt.Font("Arial", 0, 16));
  jLabel3.setText("se existe atualizações.");
  jLabel3.setForeground(Color.white);
  Painel.add(jLabel3);
  jLabel3.setBounds(350, 70, 290, 20);

  jLabel4.setFont(new java.awt.Font("Arial", 0, 16));
  jLabel4.setText("");
  jLabel4.setForeground(Color.white);
  Painel.add(jLabel4);
  jLabel4.setBounds(350, 90, 290, 20);

  jLabel5.setFont(new java.awt.Font("Arial", 0, 16));
  jLabel5.setText("");
  jLabel5.setForeground(Color.white);
  Painel.add(jLabel5);
  jLabel5.setBounds(350, 110, 290, 20);

  jLabel6.setFont(new java.awt.Font("Arial", 0, 16));
  jLabel6.setText("Bom trabalho !!!.");
  jLabel6.setForeground(Color.white);
  Painel.add(jLabel6);
  jLabel6.setBounds(350, 130, 290, 20);


  jLabelg.setFont(new java.awt.Font("Arial", 0, 16));
  jLabelg.setText("Espere um momento, por favor !!!");
  jLabelg.setForeground(Color.white);
  Painel.add(jLabelg);
  jLabelg.setBounds(30, 460, 700, 20);




  getContentPane().add(Painel);

}

public void Progressao() {

Thread cont = new Thread();
int num=0;
Barra2.setStringPainted(true);
Barra2.setIndeterminate(true);
Barra2.setMaximum(100);

try{
	while (num<100){
	  	barra.setValue(num);
	  	Barra2.setValue(num);

//------ os arquivos .bat devem estar na pasta do .jar ---------
if (num == 27 ) VerAtualizacao();

 		String msgw = "A copia foi realizada, com sucesso ! ...";
		if (arquivosok == true) {
			if (num == 31 ) {
				jLabel4.setText("Verificando ... Aguarde !");
				jLabel5.setText("Primeiro processamento ...");

// NAO UTILIZAR ESTA LINHA -> Runtime.getRuntime().exec("cmd.exe /c start "" "Processo1.bat"");
//----------------------------------
String retorno= new String("");
Runtime rt = Runtime.getRuntime();
Process prcs = rt.exec("Processo1.bat"); //Executa o comando no shell ou DOS
InputStreamReader isr = new InputStreamReader(prcs.getInputStream());
BufferedReader br = new BufferedReader(isr);
String line;
//Le a resposta do comando linha por linha.
while ((line = br.readLine()) != null)
retorno += line + "\n";
//----------------------------------

			}

			if (num == 34 ) {
				jLabel5.setText("Segundo processamento ...");

//----------------------------------
String retorno= new String("");
Runtime rt = Runtime.getRuntime();
Process prcs = rt.exec("Processo2.bat"); //Executa o comando no shell ou DOS
InputStreamReader isr = new InputStreamReader(prcs.getInputStream());
BufferedReader br = new BufferedReader(isr);
String line;
//Le a resposta do comando linha por linha.
while ((line = br.readLine()) != null)
retorno += line + "\n";
//----------------------------------
}

			if (num == 39 ) {
				jLabel5.setText("Terceiro processamento ...");

// Runtime.getRuntime().exec("cmd.exe /c start "" "Processo3.bat"");
}

			if (num == 45 ) {
				jLabel5.setText("Quarto processamento ...");
			}


			if (num == 64 ) {
				jLabel5.setText("Quase pronto !...");
			}


			if (num == 65 ) {
				jLabel4.setText("Concluindo ...");
				jLabel5.setText("Limpando temporarios ...");	

/* File f1 = new File( "Processo1.BAT" );
f1.delete();
File f2 = new File( "Processo2.BAT" );
f2.delete();
*/ }

		} else { msgw = "A copia nao foi realizada ! ..."; }   // --------- arquivos ok
		


		if (num == 71 ) { 
		      	jLabel2.setText("Finalizando .... ");
  				jLabel3.setText("Obrigado por esperar.... ");
				jLabelg.setText(msgw);
		}

		if (num == 96 ) jLabelg.setText("Tchau !!!");


		jLabel6.setBounds(350, 300-num, 290, 20);  //(350, 130, 290, 20);


	cont.sleep(40);
	num++;
	}


	}

catch(Exception B){

}

finally{ // System.out.print("Acabou o programa");
this.dispose();
// Chamar_outroform op01 = new Chamar_outroform(conex, servw);
}
}

public static void main(String[] args) {
Processar form=new Processar();
form.setVisible(true);
form.Progressao();
}

private void VerAtualizacao() {

	arquivosok = true;
	jLabelg.setText("Iniciando o processamento, aguarde !!!");

//-------- onde vai salvar -----------
String caminhow = "C:/";

//-------- banco de dados ------------
lertxt pegaserv = new lertxt("LP/serv.txt");
String servw = pegaserv.lerArquivotexto();
if (servw.length() < 6) {
JOptionPane.showMessageDialog(null, "Falta informar o Banco de dados "+servw, "Informativo",
JOptionPane.INFORMATION_MESSAGE);
arquivosok = false;
}

//--------- verifica se existe o arquivo nesta pasta
File p1w = new File(caminhow+"processo1.bat");
if (!p1w.exists()){
JOptionPane.showMessageDialog(null,
"O arquivo "+p1w+" não foi encontrado !!\nVerifique o motivo, por favor …", "Informativo",
JOptionPane.INFORMATION_MESSAGE);
arquivosok = false;
}

	File p2w = new File(caminhow+&quot;processo2.bat&quot;);  
	if (!p2w.exists()){   
		JOptionPane.showMessageDialog(null, 
			&quot;O arquivo &quot;+p2w+&quot; não foi encontrado !!\nVerifique o motivo, por favor ...&quot;, &quot;Informativo&quot;, 
			JOptionPane.INFORMATION_MESSAGE);
		arquivosok = false;
	}


} // fim teste

} // FIM DA CLASSE

T+++++

Valew cara resolveu meu problema.
Muito obrigado.