Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.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将sysout重定向到jar中的类之外_Java_Redirect_Jar_System.out - Fatal编程技术网

Java将sysout重定向到jar中的类之外

Java将sysout重定向到jar中的类之外,java,redirect,jar,system.out,Java,Redirect,Jar,System.out,我想重定向/隐藏由以下代码生成的sysout: Tools tool = new ToolsImpl(); HashCode hash = tool.computeHashCodes(dir); PrintStream printStreamOriginal=System.out; System.out.println("sysout deactivated"); System.setOut(new PrintStream(new OutputStream() { public voi

我想重定向/隐藏由以下代码生成的sysout:

Tools tool = new ToolsImpl();
HashCode hash = tool.computeHashCodes(dir);
PrintStream printStreamOriginal=System.out;
System.out.println("sysout deactivated");

System.setOut(new PrintStream(new OutputStream() {
   public void write(int b) {}
}));

System.out.println("Text to delete");

Tools tool = new ToolsImpl();
HashCode hash = tool.computeHashCodes(dir);

System.setOut(printStreamOriginal);
System.out.println("sysout reactivated");
困难的部分是:computeHashCodes方法存储在一个jar中

我尝试了以下代码:

Tools tool = new ToolsImpl();
HashCode hash = tool.computeHashCodes(dir);
PrintStream printStreamOriginal=System.out;
System.out.println("sysout deactivated");

System.setOut(new PrintStream(new OutputStream() {
   public void write(int b) {}
}));

System.out.println("Text to delete");

Tools tool = new ToolsImpl();
HashCode hash = tool.computeHashCodes(dir);

System.setOut(printStreamOriginal);
System.out.println("sysout reactivated");
要删除的文本确实已被删除,但由.computeHashCodes生成的sysout未被删除。有人知道如何隐藏这个系统吗

Thx提前,
Mike

您的解决方案在使用System.out时运行良好,因此我猜您要阻止的代码没有使用System.out作为输出。尝试找出输出是如何完成的,这样您就可以阻止它。

您的解决方案在使用System.out时运行良好,因此我猜您要阻止的代码没有使用System.out进行输出。尝试查找输出是如何完成的,以便您可以阻止它。

代码可能正在写入System.err


尝试相同的练习,但使用System.err而不是System.out。

代码可能正在写入System.err

尝试相同的练习,但使用System.err而不是System.out。

请参见此处:

请看这里:


谢谢大家,我终于避免了显示sysout

当Magodiez建议我找出输出是如何完成的时,我认为我不能这样做,因为我无法访问源代码;但后来我意识到我只需要反编译代码

所以我用反编译了它,然后我看到了输出是如何完成的:

LOGGER.log(Level.INFO, str2);
然后,我使用以下行解决了我的问题:

java.util.logging.Logger.getLogger("log.tools").setLevel(Level.SEVERE);
这实际上是我真正想要的,现在只有严重的消息将打印在sysout上


再次感谢

谢谢大家,我终于避免了显示sysout

当Magodiez建议我找出输出是如何完成的时,我认为我不能这样做,因为我无法访问源代码;但后来我意识到我只需要反编译代码

所以我用反编译了它,然后我看到了输出是如何完成的:

LOGGER.log(Level.INFO, str2);
然后,我使用以下行解决了我的问题:

java.util.logging.Logger.getLogger("log.tools").setLevel(Level.SEVERE);
这实际上是我真正想要的,现在只有严重的消息将打印在sysout上


再次感谢

嗨,谢谢你的快速回答!我可以使用jar中的类,但不幸的是,我没有访问源代码的权限,所以我不知道输出是如何完成的。但是,难道不是因为类在一个单独的jar中导致了sysout的显示吗?不,只是尝试了一下,并且与System.out在一个外部的.jar中工作良好。确保它没有与System.err一起显示,就像ThorbjørnHi说的那样,谢谢你的快速回答!我可以使用jar中的类,但不幸的是,我没有访问源代码的权限,所以我不知道输出是如何完成的。但是,难道不是因为类在一个单独的jar中导致显示sysout吗?不,只是尝试过了,并且可以与System一起工作。out在一个外部的.jar中确保它没有与System一起显示。err正如ThorbjørnHi所说,我刚刚尝试过,但仍然无法工作。生成的sysout被归类为信息,这就是我使用System.out的原因。Thx:所以基本的问题实际上不是你想要输出被吞没,而是你想要一些特定的日志语句被忽略。请尝试重新配置您的日志后端。您好,我刚刚尝试过,但仍然无法工作。生成的sysout被归类为信息,这就是我使用System.out的原因。Thx:所以基本的问题实际上不是你想要输出被吞没,而是你想要一些特定的日志语句被忽略。请尝试重新配置您的日志后端。您可以尝试在新的System.out stream中是否有任何内容,方法是打印出写入中的内容。。。如果没有,computeHashCodes就不会通过System.outHi打印出来。我已经尝试过了,实际上write方法没有打印出任何内容。jar中的computeHashCodes方法没有使用任何System.out.println,而是使用了。请看我下面的答案,我描述了如何避免显示sysout。您可以尝试在新的System.out流中是否有任何内容,方法是打印出写入中的内容。。。如果没有,computeHashCodes就不会通过System.outHi打印出来。我已经尝试过了,实际上write方法没有打印出任何内容。jar中的computeHashCodes方法没有使用任何System.out.println,而是使用了。看看下面的答案,我描述了如何避免显示sysout。