2017-03-01 5 views
2

私はjavaを使ってスクリプトを書いていますが、私はインストール後にアプリケーションをインストールするために.exeファイルを実行しています。しかし、問題は、インストールが完了する前に、マシンの場所にファイルを貼り付けるための次のステップが起こっていることです。したがって、インストールが完了していないので、ヌルファイルを貼り付ける結果、ファイルがそこにあります。前のステップが終わるまで私のプロセスを止めることができます。私はthread.sleep(10000)を使用しようとしましたが、インストール時間が変わる可能性があります。前の手順が終了するまで私のプロセスを止める方法

public class threadJoin { 
public static void main(String s[]){ 
    Runnable r = new Runnable() { 
     @Override 
     public void run() { 
      File f = new File("C:\\D\\EVProject\\"); 

      FilenameFilter textFilter = new FilenameFilter() { 
      public boolean accept(File dir, String name) { 
      return name.startsWith("EVProject"); 
    } 
}; 

File[] files = f.listFiles(textFilter); 

for (File file : files) {  

       try { 
        String filexy = file.getCanonicalPath(); 
        System.out.print(filexy); 
        Runtime.getRuntime().exec(filexy); 
        //Thread.sleep(10000); 
       } catch (IOException ex) { 
        Logger.getLogger(threadJoin.class.getName()).log(Level.SEVERE, null, ex); 
       } 
     } 


     } 
    }; 
    Runnable r2 = new Runnable() { 
     @Override 
     public void run() { 
      String l ="C:\\Program Files\\PD "; 
      String m = "C:\\0.0.9.8"; 
      File srcDir = new File(l); 
      File destDir = new File(m); 
    try {   
     FileUtils.copyDirectory(srcDir, destDir); 
    } catch (IOException e) { 
    } 
      throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
     } 
    }; 


    Thread t1= new Thread(r); 
    Thread t2 = new Thread(r2); 
    t1.start(); 
    try{ 
     t1.join(); 
    }catch(InterruptedException e){   
    } 
    t2.start(); 

} 

}

this is error what i am getting by using join()

+0

コードを表示できますか? –

+0

プログラムはインストールが完了したことをどのようにして知っていますか? –

+0

インストールの完了を確認していません。私のプログラムはちょうど.exeファイル@DanielWiddisを起動します – BleedCode

答えて

1

のRuntime.execは、プロセスハンドルを返します。このプロセスハンドルを使用すると、プロセスが終了するのを待つことができます。ハンドルは、処理が成功したかどうかを示すint値を与えることもできますが、実装に応じて異なる可能性があるため、テストする必要があります。あなたのケースでは

-

プロセスMYP = Runtime.getRuntime()のexec(filexy)下にしてみてください。
int isTrue = myP.waitFor();

役立つかどうかを確認してください。

+0

thnxそれは働いた:)。 1つの場所から別の場所にファイルを貼り付けてコピーする場合はもう1つ質問します。その場合は、貼り付けが完了するまで次の手順に移動しないでください。 Plzzz Answer :) – BleedCode

+0

Java APIを使用してファイルを移動している場合は、問題ありません。 – PankajT

+0

ファイルをコピーするためにapache-common-ioを使用しています – BleedCode

0

たぶんゆうは方法join()、このようなものに参加使用することができます。

 Runnable task1 =() -> { 
      for (int i = 0 ; i < 5 ; i++) { 
       System.out.println("task1..." + i); 
       try { 
        Thread.sleep(1000); 
       } catch (InterruptedException e) {} 
      } 
     }; 

     Runnable task2 =() -> { 
      for (int i = 0 ; i < 5 ; i++) { 
       System.out.println("task2..." + i); 
       try { 
        Thread.sleep(1000); 
       } catch (InterruptedException e) {} 
      } 
     }; 

     Thread th1 = new Thread(task1); 
     Thread th2 = new Thread(task2); 

     th1.start(); 
     try { 
      th1.join(); 
     } catch (InterruptedException e) {} 

     th2.start(); 
関連する問題