我有一个多线程程序,它基本上有两个无限循环线程加上一些 GUI(Swing)。我的两个无限循环线程有自己的 log4j 记录器,如下所示:
static final Category LOG = Category.getInstance(RReceiver.class);
在 GUI 中我检测到退出键时,我只执行 System.exit(0):
public boolean dispatchKeyEvent(KeyEvent e) {
if (e.getKeyCode()!=27 && e.getKeyCode()!=KeyEvent.VK_BACK_SPACE) return false;
System.exit(0);
return true;
}
控制台中的效果是这样的:
调试 13:07:00,940 [接收器] (RReceiver.java:93) - 得到响应 len:38
调试 13:07:01,044 [接收器] (RReceiver.java:93) - 得到响应 len:38
调试 13:07:01,045 [接收器] (RReceiver.java:93) - 新状态开发 4
log4j:WARN 找不到记录器 (com.normantech.ibcol.radiobox.RReceiver) 的附加程序。
log4j:WARN 请正确初始化 log4j 系统。
警告并不总是出现。我怀疑有错误的取消初始化顺序,但无法弄清楚。为什么会这样?我试过使用 LogManager.shutdown(); 但这没有帮助。我试图很好地完成我的无限循环,但这不是最好的解决方案,因为 II 需要添加一些额外的 Thread.sleep(x),尝试不同的 x,实际上并不确定这是否有帮助。