Java高管是否有可能获得强制冲洗?

问题描述 投票:0回答:1

我是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 ++中写了相同的逻辑(基于这个问题SO arswer)我及时得到了我的输出。

java windows output exec
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.