Ignite 中的 PrintWriter 之谜
PrintWriter mystery in Ignite
我正在使用两个节点,一个从 IDE (Intellij IDEA) 开始计算,另一个已经在控制台上启动(启用远程调试)。我正在从 IDE.
进行调试
我没有使用 peerClassLoading,我已将 jar 放在控制台节点的库中。
有一行代码:System.out.println(x);
- 两者都可以正常打印。但是下面几行:
getPrintWriter().println(x);
getPrintWriter().flush();
仅在从 IDE 开始的节点上工作。 PrintWriter 包装了一个 System.out。控制台节点抛出 IOException - 'the file handle is invalid' during flush.
这是堆栈跟踪的屏幕截图:
这里是与控制台节点相关的代码部分:
根据建议,我重新设置了打印机,问题就解决了。这是屏幕截图:
序列化上下文
这是启动点火计算的代码部分:
对于控制台 JVM 上的节点,ConsoleClient
被序列化,因此它包含 类(命令、侦听器及其打印编写器等)。在列表 clients
中,所有 ConsoleClient
对象都将它们的打印编写器作为 System.out
的包装器,因此理想情况下,不需要运行中的标记块。请注意,如果删除此标记的块,IDE 节点会正确打印,但控制台节点不会打印。
这个 PrintWriter
试图委托给 FileOutputStream
,所以它要么不在下面 System.out
,要么 System.out
被替换了。 Ignite 从不这样做,所以这个问题与它无关。您应该检查 getPrintWriter()
方法的代码并确保 System.out
是您正在寻找的控制台编写器。
我正在使用两个节点,一个从 IDE (Intellij IDEA) 开始计算,另一个已经在控制台上启动(启用远程调试)。我正在从 IDE.
进行调试我没有使用 peerClassLoading,我已将 jar 放在控制台节点的库中。
有一行代码:System.out.println(x);
- 两者都可以正常打印。但是下面几行:
getPrintWriter().println(x);
getPrintWriter().flush();
仅在从 IDE 开始的节点上工作。 PrintWriter 包装了一个 System.out。控制台节点抛出 IOException - 'the file handle is invalid' during flush.
这是堆栈跟踪的屏幕截图:
这里是与控制台节点相关的代码部分:
根据建议,我重新设置了打印机,问题就解决了。这是屏幕截图:
序列化上下文
这是启动点火计算的代码部分:
对于控制台 JVM 上的节点,ConsoleClient
被序列化,因此它包含 类(命令、侦听器及其打印编写器等)。在列表 clients
中,所有 ConsoleClient
对象都将它们的打印编写器作为 System.out
的包装器,因此理想情况下,不需要运行中的标记块。请注意,如果删除此标记的块,IDE 节点会正确打印,但控制台节点不会打印。
这个 PrintWriter
试图委托给 FileOutputStream
,所以它要么不在下面 System.out
,要么 System.out
被替换了。 Ignite 从不这样做,所以这个问题与它无关。您应该检查 getPrintWriter()
方法的代码并确保 System.out
是您正在寻找的控制台编写器。