【发布时间】:2013-08-13 06:34:31
【问题描述】:
我正在编写一个使用 ANSI 颜色代码打印日志消息的 Java 框架。当然,用户总是有可能在 Eclipse 中使用它,在这种情况下,ANSI 转义码在控制台上显示为垃圾字符。最好能自动检测到这一点,这样用户就不必手动关闭它了。
我已经在谷歌上搜索了一些关于这个主题的内容,我怀疑它无法完成,但没有多少人尝试过,所以我认为值得一问。想到的一种方法是检查"xterm".equals(System.getenv("TERM")),这某种是否有效,但有很多异常并且在Windows上根本不起作用(我正在使用JANSI库来获取Windows 彩色终端支持)。想到的另一个选择是尝试调用外部程序来检查名为 eclipse 的进程是否正在运行,但这是一个肮脏的 hack,并且也有边缘情况(如果有人在终端中运行程序,颜色会消失同时也使用 Eclipse)。
我什至尝试使用反射来查找 System.out 正在包装的 OutputStream 子类,假设它可能因终端类型而异,但无论如何它显然是 FileOutputStream。
有没有更简单的方法来确定 Java 程序是否在内置的 Eclipse 控制台中运行,或者这是否像听起来那样无望?
【问题讨论】: