2

次のような別の Java アプリケーションを (ProcessBuilder を使用して) 起動する Java アプリケーションがあります。

String val = "something";
ProcessBuilder processBuilder = new ProcessBuilder("java", "-classpath", dir, appName, val);
Process p = processBuilder.start();

これで問題なく動作し、appName はパラメータ val で起動され、実行されて動作します...素晴らしいです...問題はコンソール ウィンドウが表示されないことです...appName はコンソールに多くの出力を行いますが、それを確認する必要があります...コンソールでプロセスを開始するにはどうすればよいですか?

("CMD.exe"、"java"、"-classpath"、dir、appName、val) などを試していますが、うまくいきません ...

また、ストリームをリダイレクトできません。私のプログラムは実際にこれらの appName の 5 ~ 10 個を開始できます。それぞれに独自の情報を表示する独自のコンソール ウィンドウが必要です。

どんな助けでも大歓迎です。ありがとう、

4

4 に答える 4

0

Processを介していくつかのシェルスクリプトを呼び出して、コマンドラインウィンドウを開き、必要なものを起動します。スクリプトがデタッチしない限り、通常、シェルコマンドによるこれの実行を停止できます。Javaは実行中のプロセスを保持します。

私はLinuxでそれを行いましたが、概念は似ているはずです。

#!/bin/bash
# To open a process in a new window.
gnome-terminal -x ./your-real-shell-script-here.sh "$@"

実際のスクリプトには、次のようなJava実行が含まれます。

#!/bin/bash
java -jar your-jar-file.jar "$@"

javawを使用してWindowsで実行できると思うので、必要なシェルスクリプトは1つだけです。

于 2012-07-24T16:06:48.873 に答える
0

Console オブジェクトは、コンソールから java.... を実行した場合にのみ存在します。 それ以外の場合、取得するための呼び出しは null を返します。

コンソールを表示したい場合は、コマンド シェル コンソール (例: Windows cmd.exe または Unix bash シェル ウィンドウ) を開いて、次のように入力する必要があります。

java -classpath="..." com.example.appName arg1

別の方法で実行したい場合は、申し訳ありませんが、コンソールへのログ記録は適していません。代わりに、次のいずれかを使用してログに記録します。

  • log4j
  • slf4j
  • ログバック
于 2013-07-04T03:34:42.563 に答える
0

試しましたRuntime.getRuntime().exec("cscript java -classpath ...");か?

とにかく、ログ フレームワーク (log4j、commons-logging) の使用を検討してください。5 つのコンソールを開くことは、最も賢明なことではありません。

于 2009-12-09T21:37:50.443 に答える
0

コンソール ウィンドウは、一般に、最も信頼性の高い形式のログ記録ではありません。一定量の情報 (バッファー) のみを保存し、プラットフォーム間で異なる動作をすることができます。

log4jなどを使用してファイルにログを記録することを強くお勧めします。リアルタイムで表示する必要がある場合は、tail のようなプログラムを使用します (Windows を使用しているようです)。

これに加えて、ウィンドウを常に表示したいので、ログごとにテールプログラムを起動するのが面倒な場合があるため、Javaスイングで独自のログウィンドウを作成します。

基本的な考え方は、OS に依存しすぎないことです。

于 2009-12-09T21:36:25.297 に答える