Javaでexe用のGUIを作成しています。少し面倒ですが、私は挑戦しています。このプログラムはコンソールプログラムであるため、実行中のプログラムの出力を読み込んで、それをSwingのテキストボックスに入れる必要があります。しかし、私が試したあらゆる方法は不安定であるか、まったく動作しません。誰もがこれで私を助けることができますか?注意私はApache Commons execを試してみましたが、ほとんど成功しませんでした。また、私はこのクロスプラットフォームを作るしようとしているとOSを取得するためのメソッドを作成しました:Java - プログラムの実行中にexecとreadの出力を使用する
public enum OSType {
WINDOWS, OSX, LINUX, DAFUQ
}
/**
* Gets OS running on then caches result
* @return OS running on
**/
public static OSType getOS() {
if (os != null)
return os;
else {
os = getOperatingSystem();
return os;
}
}
/** Don't use this! Use {@link Frame#getOS()} instead **/
public static OSType getOperatingSystem() {
String OS = System.getProperty("os.name").toLowerCase();
if (OS.indexOf("win") >= 0)
return OSType.WINDOWS;
else if (OS.indexOf("mac") >= 0)
return OSType.OSX;
else if (OS.indexOf("nix") >= 0 || OS.indexOf("nux") >= 0 || OS.indexOf("aix") > 0)
return OSType.LINUX;
else
return OSType.DAFUQ;
}
EDIT:
を明確にするために、私はとして機能の.jarプログラムを作成していますEXEのGUIです。これは私が現在、プログラムを起動するために使用しようとしていますコードです:
ProcessBuilder prc = new ProcessBuilder(commands);
prc.redirectErrorStream(true);
try {
Frame.exec = prc.start();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
commands
変数は、私が実行する必要があるコマンドのリストだけです。プログラムが正しく動作しているのは、タスクマネージャー上で動作しているのが分かるからです。ここで私は、プロセスの入力ストリームから読んでいますかのコードでもある:
BufferedReader in = new BufferedReader(new InputStreamReader(exec.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
System.out.println(line);
}
私は非同期ストリームから読み取るしようとしていますので、このコードは、私が格納するために必要な理由は別のスレッドであります"exec"変数。
あなたは本当に言っていますか?**あなたはバイナリEXEとしてデプロイしたいと思う** javaアプリケーションを書いていますか?あなたのJavaコードはsystem.outに書き込んでいます。今、あなたは何をしたいですか?その出力をフェッチしてUI要素に入れますか? – GhostCat
これには標準的なパターンがあり、SOにはいくつかのダンプがありますが、今のところ見つけられないようです。基本的な要件は、プロセスの '' stdin'への入力を供給する1つのスレッド、プロセスの '' stdout/stderr'の出力を読み込む1つのスレッド、およびプロセスが終了した後のメインスレッドをクリーンアップすることです。 Excessal実行可能ファイルを起動するには、 'ProcessBuilder'を使います。ところで、実際にプロセスを起動するコードはどこですか? –
http://stackoverflow.com/questions/8149828/read-the-output-from-java-exec?rq=1? –