使用PrintWriter(System.out)没有数据输出到控制台上的问题

问题:我采用服务器在每获取一个客户端的socket时就开启一个新的线程来处理这个请求,我把PrintWriter pw = new PrintWriter(System.out,true)这句放入到try中自动关闭

资源块中。第一个客户端来访问正常,但后面访问就在控制台上再也看不到打印的数据。。郁闷
解决办法: 我把PrintWriter pw = new PrintWriter(System.out,true)从自动关闭资源块中移除来。
原因: 由于你把最底层的输出流给关闭了,下次Sytem.out这个输出流为null但它不会抛异常它会假装很正常的往下执行完
源码分析:

//所有的println都会最终调用这个方法从这里可知道它很恶心的偷偷将它正常化
 public void write(String s, int off, int len) {
        try {
            synchronized (lock) {
                ensureOpen();
                out.write(s, off, len);
            }
        }
        catch (InterruptedIOException x) {
            Thread.currentThread().interrupt();
        }
        catch (IOException x) {
            trouble = true;
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值