system.out.println()在使用printstream后未运行

30byixjq  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(398)

关闭。这个问题需要细节或清晰。它目前不接受答案。
**想改进这个问题吗?**通过编辑这个帖子来添加细节并澄清问题。

上个月关门了。
改进这个问题
因此,我有以下代码捕获 System.out.println() 打印到控制台的方法之一的输出 login.printAccountsByName(); 但我不能用 System.out.println() 之后。感谢您的帮助。
所以当程序进入 if 部分中,print语句不再向控制台打印任何内容。

PrintStream oldSysOut = System.out;
        ByteArrayOutputStream outBuf = new ByteArrayOutputStream();
        try (PrintStream sysOut = new PrintStream(outBuf, false)) {
            System.setOut(sysOut);
            System.setErr(sysOut);

            // Logic of system.out goes here
            login.printAccountsByName();
        }
        String output = new String(outBuf.toByteArray());

        oldSysOut.close();

        BufferedReader bf = new BufferedReader(new StringReader(output));
        String line = null;

        try {
            line = bf.readLine();
            if ( !line.equals("")) {
                System.out.println("You own the following funds\n");
            login.printAccountsByName();

            System.out.print("\nEnter the name of the fund to sell: ");
            String option5 = input.nextLine();

            System.out.print("\nEnter the number of shares to sell or \"all\" to sell everything: ");
            double sellShares = input.nextDouble();

            login.sellShares(option5, sellShares);

            System.out.println("You own the following funds\n");
            login.printAccountsByName();

            System.out.println("Your current cash balance is $" + login.getCash());
            }
wn9m85ua

wn9m85ua1#

在您的代码中,您将默认的system.out printstream更改为另一个,这是您创建的,请参见:

ByteArrayOutputStream outBuf = new ByteArrayOutputStream();
try (PrintStream sysOut = new PrintStream(outBuf, false)) {
   System.setOut(sysOut);

但是您的新printstream正在写入outuf,而outuf没有连接到控制台。这就是为什么您没有看到稍后触发的system.out.println调用的任何结果的原因之一。您可以将bytearrayoutputstream连接到另一个输出流,例如带有outbuf.writeto(…)的fileoutputstream;
另一个原因是try with resource语句关闭了打印流:

try (PrintStream sysOut = new PrintStream(outBuf, false)) {

在这个try块的末尾,sysout的close方法被自动触发,并且您的sysout流被关闭,不再打开进行写入。

相关问题