5

CMDプロセスからの出力を取得してGUIに表示するにはどうすればよいですか?これは、プロセスを実行するために使用しているコードです。

try {
    String line;
    Process p = Runtime.getRuntime().exec("cmd /c \"e:\\folder\\someCommands.cmd\"");
    BufferedReader input =
            new BufferedReader(new InputStreamReader(p.getInputStream()));
    while ((line = input.readLine()) != null) {
        System.out.println(line);
    }
    input.close();
} catch (Exception err) {
    err.printStackTrace();
}

私はこれをやってみました:

jLabel1.setText(line);

...しかし、プロセスの実行中はGUIが完全にロックされているため、最後まで何も更新されません。これはあまり役に立ちません。それ以外は、CMDは正常に機能します。出力をリアルタイムで表示したいだけです。

4

3 に答える 3

3

プロセスを実行するには、別のスレッドを開始する必要があります。Runnable実行に使用しているコードは、ほとんどそのままスレッド (またはの)メソッドに挿入できrun()ますが、JLabel にテキストを設定するには、次のようなものを使用する必要があります。

...
while ((line = input.readLine()) != null) {
    SwingUtilities.invokeLater(new SetTextRunnable(jLabel1, line));
}
...

class SetTextRunnable implements Runnable {
    private String line;
    private JLabel jLabel1
    public SetTextRunnable(JLabel jLabel1, String line) {
        this.jLabel1 = jLabel1;
        this.line = line;
    }
    public void run() {
        jLabel1.setText(line);
    }
}

編集:何かに気づきました:明らかにクラスSwingWorkerはこの種のもののために設計されているため、それは別のオプションです(Javaのバージョンに存在する場合)。

EDIT to the EDIT:私はばかげているのでSwingWorker、別の回答ですでに言及されていることに気づきませんでした。

于 2009-03-20T18:49:51.977 に答える