3

私は他のアプリケーションを実行できるようにJavaでアプリを書いています。そのために、Processクラスオブジェクトを使用しましたが、使用すると、アプリはプロセスが終了するのを待ってから終了します。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(); 
}
4

2 に答える 2

3

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

このプログラムで小さなテストを行いました

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

netbeans で実行すると、まだ実行されているように見えます。java -jar を使用してコマンドラインから実行すると、すぐに戻ります。

したがって、プログラムはおそらく終了を待っていませんが、IDE は終了を待っているように見えます。

于 2012-03-08T20:42:06.290 に答える
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;
        }
    });
于 2012-03-08T20:30:40.120 に答える