2016-11-14 39 views
-1

javaを使用して実行可能ファイルを実行しようとしています。Javaで実行可能ファイルを実行中に落とす

私は数千人のユーザーからアクセスできるUIを持っています。 実行可能ファイルは、ボタンでトリガーできます。

私はいくつかの例を見ていた: Java Programming: call an exe from Java and passing parameters

提案した方法を使用してのボトルネックは何ですか?

たとえば、ユーザーがボタンをクリックして実行可能ファイルを実行すると、2番目のユーザーのパフォーマンスに影響しますか?

ボタンを同時に押すとどうなりますか?

または実行が完了したかどうかをどのように知っていますか(OSは私のために管理するつもりはないと思います)。

+0

単にそれをしようと行動をプロファイル。 – MrSmith42

+0

スレッドを作成し、外部プロセスのステータスを追跡します。 –

+0

実行可能ファイルの実行方法を実装する前に、ボタンへのアクセスを同期させる必要があると思われます。パフォーマンスの問題を考える前に、プログラムの精度について考える必要があります。 – Juvanis

答えて

1

推奨される方法を使用する際のボトルネックは何ですか?

ハードウェアと実行可能ファイル自体が最も大きな問題です。実行可能ファイルがしばらくして完了した場合は、正常であるはずです。あなたは何かを待っているプロセスの1000を望んでいません。プロセスが開始したらプロセスを監視し、タイムアウトに達するとプロセスを終了する必要もあります。もう1つの考慮点は、ユーザーあたりの同時プロセス数を制限することです。

たとえば、ユーザーがボタンをクリックして実行可能ファイルを実行すると、これは2番目のユーザーのパフォーマンスに影響しますか?

直接ではありません。上記を参照。

ボタンを同時に押すとどうなりますか?

毎回新しいスレッド(またはタスクスケジューラ)でプロセスを開始すると、何も表示されません。ボタンが押されるたびに、新しいプロセスが開始されます。

実行が完了したかどうかを知るにはどうすればいいですか(OSは私のために管理するとは思わない)。ここで

例です。

String command = "PATH_TO_EXECUTABLE/EXECUTABLE PARAMS "; 
log.info("Executing command - " + command); 
// Executing the command 
Process process; 
ArrayList<String> outLines = new ArrayList<String>(); 
try { 
    process = Runtime.getRuntime().exec(command); 

    // Getting the results 
    process.getOutputStream().close(); 
    String line; 
    log.info("Standard Output:"); 
    BufferedReader stdout = new BufferedReader(new InputStreamReader(
     process.getInputStream())); 

    while ((line = stdout.readLine()) != null) { 
    log.info(line); 
    outLines.add(line); 
    } 

    stdout.close(); 
    log.info("Standard Error:"); 
    BufferedReader stderr = new BufferedReader(new InputStreamReader(
     process.getErrorStream())); 
    while ((line = stderr.readLine()) != null) { 
    log.info(line); 
    } 
    stderr.close(); 
    log.info("Done"); 

} catch (IOException e) { 
    log.error("Error while exceuting command", e); 
} 
String result = outLines.get(outLines.size()-1); 
//TODO do something with the results 
//at this point the process has finished executing 
+0

"開始したプロセスを監視し、タイムアウトになったらプロセスを終了する必要もあります。"どのようにこれを正確に行うのですか?私はそれを監視する別のアプリケーションを書く必要がありますか?または、特定のプロセスを監視していつか終了させるサードパーティ製のアプリケーションを取得しようとする必要がありますか? –

+0

この例を表示し、機能の一部を私のものにマージすることができます。 http://stackoverflow.com/questions/808276/how-to-add-a-timeout-value-when-using-javas-runtime-exec –

関連する問題