2017-06-16 12 views
-1

私はJavaアプリケーションを開発しています。ここでは、バッチファイルをアップロードしてAPIを休止する必要があります。私はコマンドプロンプトから必要なときにアプリケーションを停止したいが、アプリケーションがファイルをアップロードするプロセスにある場合、それを完了しなければならず、別のファイルのアップロードを開始する前に停止しなければならない。Javaアプリケーションを正常にコマンドプロンプトから停止する方法

+1

非デーモンスレッドとJVMの終了方法に関するいくつかの調査を行うことをお勧めします。 https://stackoverflow.com/questions/2213340/what-is-daemon-thread-in-java – Steve

答えて

0

あなたは、アプリケーションの終了コードJVMのシャットダウンフックでisUploadingフラグのクイックチェックを行うことができます。 falseの場合は、終了します。 trueの場合は、アップロードプロセスが完了するのを待つか、タイムアウトになります。

https://stackoverflow.com/a/17792988/2884613を参照してください。

+0

raychzにお答えいただきありがとうございます。私は2つのフラグを使用しました。以下は私が使用したサンプルコードです。 – jaswanth

1

あなたのプログラムは1つのスレッドで実行されるため、いつでも停止することはできません。したがって、すべてのタスクを指定された順序で完了する必要があります。

ファイルのリストをアップロードするときに、ファイルがバックグラウンドでアップロードされている間に、あるスレッドで前面に何らかのリスナーを提供できます。スレッド1が終了する必要のある情報を受け取ると、スレッド2が2番目のファイルのアップロードを開始する前に何らかの種類のグローバルブール値を設定することができます。

アップロードプロセスをバックグラウンドスレッドにすると、そのプロセスでプログラムを変更できます。あなたは優雅に、一般的にプログラムを終了するのドキュメントを探していた場合、それはここで見つけることができ

http://docs.oracle.com/javase/7/docs/api/java/lang/Runtime.html#exit%28int%29

+0

あなたの答えをありがとう。シャットダウンフックを使用して実装し、それが動作していると言ったようにグローバルブール値を使用しました。 – jaswanth

0

パブリッククラスメイン{

public static void main(String[] args) { 

    Runtime r = Runtime.getRuntime(); 
    r.addShutdownHook(new ShutdownHook()); 

    while(Flag.flag){ 

     System.out.println("Application is still running......"); 


    } 

    if(!Flag.flag) { 
     System.out.println("goin to exit the application"); 
     Flag.shutdownFlag = false; 
     return; 
    } 

} 

}

パブリッククラスフラグ{

public static boolean flag = true; 
public static boolean shutdownFlag = true; 

}

パブリッククラスShutdownHookが延びるスレッド{

public void run() { 

    System.out.println("Shutdown hook is initiated"); 
    Flag.flag = false; 

    while (Flag.shutdownFlag) { 
     System.out.println("Waiting for application to complete the task.."); 
    } 

} 

私はコマンドプロンプトでjarを実行しています。アプリケーションを停止するとすぐに、コマンドプロンプトでctrl + cを入力するだけです。

関連する問題