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

我正在用 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.GameViewsetPlacement

INFO: Player1 placed a checker in position : column 4, row 5

| - | - | - | - | - | - |

| - | - | - | - | - | - | - |

| - | O | O | O | - | - | - |

| O | X | X | X | - | - | - |


*****************************

有人能解释一下为什么记录器会这样吗?


慕无忌1623718
浏览 106回答 1
1回答

茅侃侃

具体来说,您的控制台同时显示两个输出流,发送到不同流的消息之间没有顺序保证。使 Logger 能够写入标准输出流的一种方法是创建您自己的StreamHandler并将您的 Logger 配置为将输入发送到处理程序。您可能还必须禁用父处理程序以避免重复输出。您可能还希望确保输出主动发送到所需的输出流,如下所示:Handler h = new StreamHandler(System.out, formatter)    {        public void publish(LogRecord record)        {            if(record == null)                return;            super.publish(record);            super.flush();        }    };
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java