为了账号安全,请及时绑定邮箱和手机立即绑定

Java - 控制台上的记录器问题

Java - 控制台上的记录器问题

慕无忌1623718 2023-05-10 15:37:07
我正在用 Java 开发 Connect4 游戏,但我在使用 Logger 时遇到了问题。我不知道为什么在其他类型的印刷品之间在不同的地方印刷广告。public void setPlacement(Move lastMove){    Logger.getGlobal().info("Player" + lastMove.getPlayerIndex() + " placed a checker in position : " + lastMove.toString());    display();}方法 display() 只是打印游戏的网格。这是上述方法的输出:| 1 | 2 | 3 | 4 | 5 | 6 | 7 || - | - | - | - | - | - | - || - | - | - | - | - | - | - || - ago 01, 2019 6:10:24 PM it.unicam.cs.pa.connectFour.GameViewsetPlacementINFO: Player1 placed a checker in position : column 4, row 5| - | - | - | - | - | - || - | - | - | - | - | - | - || - | O | O | O | - | - | - || O | X | X | X | - | - | - |*****************************有人能解释一下为什么记录器会这样吗?
查看完整描述

1 回答

?
茅侃侃

TA贡献1842条经验 获得超21个赞

具体来说,您的控制台同时显示两个输出流,发送到不同流的消息之间没有顺序保证。

使 Logger 能够写入标准输出流的一种方法是创建您自己的StreamHandler并将您的 Logger 配置为将输入发送到处理程序。您可能还必须禁用父处理程序以避免重复输出。您可能还希望确保输出主动发送到所需的输出流,如下所示:

Handler h = new StreamHandler(System.out, formatter)

    {

        public void publish(LogRecord record)

        {

            if(record == null)

                return;

            super.publish(record);

            super.flush();

        }

    };


查看完整回答
反对 回复 2023-05-10
  • 1 回答
  • 0 关注
  • 105 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信