2012-03-08 17 views
1

私はjavaでアプリケーションを作成していて、他のアプリケーションを実行できます。これを行うために、私はProcessクラスオブジェクトを使用しましたが、私はそのプロセスを終了する前にプロセスが終了するのを待っています。 Javaで外部アプリケーションを実行する方法はありますか?終了するまで待たないでください。javaで外部アプリケーションを実行しますが、終了するのを待つことはありません

public static void main(String[] args) 
{ 
FastAppManager appManager = new FastAppManager(); 
appManager.startFastApp("notepad"); 
} 

public void startFastApp(String name) throws IOException 
{ 
    Process process = new ProcessBuilder(name).start(); 
} 

答えて

0

別のスレッドで実行できます。

public static void main(String[] args) { 
     FastAppManager appManager = new FastAppManager(); 
     appManager.startFastApp("notepad"); 
    } 

    public void startFastApp(final String name) throws IOException { 
     ExecutorService executorService = Executors.newSingleThreadExecutor(); 
     executorService.submit(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        Process process = new ProcessBuilder(name).start(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 

      } 
     }); 

    } 

あなたは、あなたのニーズに応じて、デーモン・スレッドを起動する場合があります

ExecutorService executorService = Executors.newSingleThreadExecutor(new ThreadFactory() { 
     @Override 
     public Thread newThread(Runnable runnable) { 
      Thread thread = new Thread(); 
      thread.setDaemon(true); 
      return thread; 
     } 
    }); 
+0

私は彼が彼の狂人がプログラムを開始した後に終了することを望んだと思う。 –

2

ProcessBuilder.startを()プロセスが終了するのを待ちません。その動作を取得するには、Process.waitFor()を呼び出す必要があります。

、それはまだ実行されているように見えるNetBeansで実行すると、私はこのプログラム

public static void main(String[] args) throws IOException, InterruptedException { 
    new ProcessBuilder("notepad").start(); 
} 

小さなテストをしました。コマンドラインからjava -jarを実行するとすぐに戻ります。

あなたのプログラムは、おそらく終了するのを待っているのではありませんが、あなたのIDEはそうそうです。

+0

ProcessBuilderがループ内で実行されるのはどうですか?完了したら次のループに行くのを待っていますか? – sijo0703

+0

waitFor()を使用すると、それが実行されます。 –

関連する問題