Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 侦听器以防止System.out显示在屏幕上_Java - Fatal编程技术网

Java 侦听器以防止System.out显示在屏幕上

Java 侦听器以防止System.out显示在屏幕上,java,Java,我在做我的学术项目,在构建和测试时,我放了很多println()语句 但是当我必须提交时,所有的照片都不应该显示出来 我可以实现类似listener的东西吗?当尝试执行System.out并阻止它显示时,将调用它。 我不知道这个想法有多可行,只是想知道它是否可行。 我知道我可以使用一个日志文件或写入一个文件,但我又一次想到,如果我必须禁用SOP,我该怎么做 谢谢正确的做法是在printlns之前使用标志,或者更好的做法是使用记录器(有许多可用的版本) 但是,可以将所有System.out重新路由

我在做我的学术项目,在构建和测试时,我放了很多println()语句

但是当我必须提交时,所有的照片都不应该显示出来

我可以实现类似listener的东西吗?当尝试执行System.out并阻止它显示时,将调用它。 我不知道这个想法有多可行,只是想知道它是否可行。 我知道我可以使用一个日志文件或写入一个文件,但我又一次想到,如果我必须禁用SOP,我该怎么做


谢谢

正确的做法是在printlns之前使用标志,或者更好的做法是使用记录器(有许多可用的版本)


但是,可以将所有System.out重新路由到别处。搜索“redirect system.out”,你会发现很多例子。

使用system.setOut函数(和setErr) 以下程序将只打印1:(而不是2)

PrintStream realOut=System.out;
试一试{
out=新的ByteArrayOutputStream();
系统放样(新打印流(out));
系统输出打印项次(“bla”);
}最后{
系统放样(重新放样);
}

System.out.println(out)

使用log4j。这将允许您执行以下操作:

if (log.isLoggingEnabled()) {
   log.debug("this will be printed at runtime with debugging enabled");
}
然后,您可以将应用程序配置为在提交代码后不打印调试语句(这通常在.properties文件或XML文件中完成)。在运行Java的网站上使用日志是一种非常常见的做法,尤其是在log4j上有很多文档。事实上,在大多数情况下,提交带有System.out行的代码进行调试被认为是不好的形式。想想那个正在阅读日志文件的人


使用记录器的额外方法调用对性能影响很小,但这样做会使可维护性更加实用。您可能也会给您的讲师留下深刻印象:)

通常,硬编码写入System.out不是一个好主意。作为一个快速解决方案,您可以将对System.out的所有引用更改为一个类中自己的静态变量。这至少让您有机会更改正在写入的流。例如

public static void main(String[] args)
{
    static public PringStream out = System.out;

    void someMethod()
    {
       out.println("some logging message");
    }
}
您可以用Myclass.out快速替换代码中System.out的所有用法。有了它,您就可以根据参数或系统属性更改输出流。例如

if (Boolean.getBoolean("debug"))
   out = System.out;
else
   out = new PrintStream(new OutputStream() {
    public void write(int data) throws IOException {}
   };
当然,这是所有的裤子座位的东西和一次性代码


一个更健壮、更灵活的解决方案是使用日志api,如。

我记得有一次,我将所有println语句包装在一个返回伪布尔值的方法中,然后使用断言,以便在运行时打开或关闭它们。但我很年轻,以前从未使用过伐木机。
public static void main(String[] args)
{
    static public PringStream out = System.out;

    void someMethod()
    {
       out.println("some logging message");
    }
}
if (Boolean.getBoolean("debug"))
   out = System.out;
else
   out = new PrintStream(new OutputStream() {
    public void write(int data) throws IOException {}
   };