Java 访问程序消息输出到错误流

Java 访问程序消息输出到错误流,java,Java,我创建了一个处理文件的类,如果遇到某些特定错误,它会向错误流输出相关的错误消息 我正在处理另一个需要访问这些错误消息的类。我不知道该怎么做。我是Java编程的初学者。基于我有限的知识,我认为我的两个选择是要么调用第一个类的main方法(但我不知道在这种情况下如何获取错误消息),要么执行已编译的类并通过Process类的getErrorStream()方法访问消息。但是,我遇到了系统死锁的问题,甚至可能没有执行exec命令,所以我也不确定如何实现第二种情况 我不太确定您在问什么,但您的代码的一个潜

我创建了一个处理文件的类,如果遇到某些特定错误,它会向错误流输出相关的错误消息


我正在处理另一个需要访问这些错误消息的类。我不知道该怎么做。我是Java编程的初学者。基于我有限的知识,我认为我的两个选择是要么调用第一个类的main方法(但我不知道在这种情况下如何获取错误消息),要么执行已编译的类并通过Process类的getErrorStream()方法访问消息。但是,我遇到了系统死锁的问题,甚至可能没有执行exec命令,所以我也不确定如何实现第二种情况

我不太确定您在问什么,但您的代码的一个潜在问题是您没有读取进程的标准输出。根据“未能及时…读取子流程的输出流可能会导致子流程阻塞,甚至死锁”。这就是您提到的“问题”吗


Edit:是的,您可以做您正在做的事情,但一定要同时读取错误流和输出流(请参阅我的评论),或者您可以直接从代码中调用main方法,在这种情况下,错误输出将被写入。您可以使用来安装自己的流,以获取写入流的内容,但请记住,您自己的应用程序(运行另一个应用程序的应用程序)的任何错误输出也将显示在此处。听起来,你想要的是产生一个单独的进程,就像你已经在做的一样。

你不能基于许多带有main方法的小程序来构建模块化。您必须将函数块作为设计用于从其他地方调用的类——这意味着以某种编程方式返回状态信息,而不仅仅是将其写入System.err。如果确实是错误,则抛出异常。如果必须返回状态,请设计一个数据结构来保存状态并返回它。但不要到处启动新流程并读取它们的错误流。

我认为这可能是错误所在。当执行代码的这一部分时,程序就卡住了,继续无休止地运行,没有终止。不过我不知道怎么修。我猜在最基本的形式中,我的问题是如何执行第一个java类并从第二个java类访问其错误流消息。您删除了代码,我不记得它到底是什么样子,但它在某一点上调用了Process.getErrorStream(),在等待进程退出的过程中,您不断地从中读取。你也必须为自己做同样的事。即使您只是忽略了从中读取的内容,您也必须这样做,否则可能会导致进程无限期地阻塞。