覆盖系统。out/err.println

Override System.out/err.println

自从 JDBC Bridge 在 Java 中弃用后,我一直在使用 UCanAccess 进行 JDBC 连接。然而,UCanAccess 不会以正常的 try-catch 的形式抛出异常,而是立即将错误行打印到控制台。由于我的用户不会通过控制台访问该软件,我想将我所有的控制台输出重定向到 JOptionPane 消息对话框,以便我的用户看到错误打印,而不是简单地浪费在不可见的控制台中.这可能吗?我试过 System.setErr,但我只能重写 write() 方法,只输出一个 int?

UCanAccess 在 "the normal form" 中抛出异常,所以你的问题有点误导,你的假设是错误的。

它还在加载数据库时使用 SQLWarning,请参阅有关它的 jdbc 接口(例如,如果它无法加载查询)。 UCanAccess 控制台只是打印它们。

最后,在 数据库损坏 的情况下,数据完整性问题或其他非常严重的问题 jackcess 或 ucanacess 可能会打印在 System.err 上。显然,尽管很严重,但只要它们 不阻塞 就可能发生。这只是为了确保记录错误消息而不会阻止成功的数据库加载异常(所以我不能为它们使用 SQLWarning )。

对于那些具体问题,您可以将 System.err 消息重定向到 JOptionPane,但它们通常是关于 mdb/accdb 格式的非常技术性的错误,所以我认为展示它们不是一个好主意在用户界面中。

将 system.err 重定向到特定的错误文件中(以便后续 解决问题)要好得多。