簡體   English   中英

Java執行程序 是否可以用力沖洗?

[英]Java exec. Is it possible to get force flush?

我是Java的新手,所以我的問題可能會混亂。

我試圖從Java運行一些進程。 這是xmr-stack礦工。 我使用這樣的代碼:

package com.company;
import java.io.*;

public class Main {

    public static void main(String[] argv) throws Exception {
        try {
            String line;
            Process p = Runtime.getRuntime().exec( "D:\\xmr-stak.exe " +
                    /* some arguments */ );

            BufferedReader in = new BufferedReader(
                    new InputStreamReader(p.getInputStream()) );
            while ((line = in.readLine()) != null) {
                System.out.println(line);
            }
            in.close();
        }
        catch (Exception e) {
            // ...
        }
    }
}

它適用於普通事物。

但是我遇到了一個問題,就是在xmr-stak某個點之后我沒有輸出。 據我了解,此應用程序有時會創建子進程。 而且我沒有看到此子進程產生的輸出。

但是經過很長時間的工作(超過10分鍾),我得到了這段時間的輸出。 看起來有些輸出緩沖區在溢出后被刷新了。 現在,我想了解如何在Java中更頻繁地獲取所需的輸出。

另一方面,我用c ++編寫了相同的邏輯(基於這個問題,所以很了解 ),我及時得到了輸出。

Runtime.exec已過時。 您可以用幾行使用ProcessBuilder替換整個程序:

ProcessBuilder builder = new ProcessBuilder("D:\\xml-stak.exe",
    arg1, arg2, arg3);

builder.inheritIO();

Process p = builder.start();
p.waitFor();

您不需要讀取進程的輸出(因此不必擔心緩沖),因為InheritIO()使該輸出出現在Java程序的輸出中。

您還不需要捕獲任何異常,因為您的main方法已經throws Exception

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM