什么是System.out.println的良好实践替代?

时间:2013-05-19 00:26:53

标签: java swing printing console

我的应用程序必须为用户输出内容。在我的所有课程中,我一直在使用System.out.println,但由于该程序并不打算通过命令行运行,因此这并不合适。

我曾想过简单地创建一个扩展JPanel并将所有内容附加到textarea的类。我一直在读,这不是一个好的举动,并且出现了一个问题,即我必须将JPanel类传递给所有输出文本的类。

System.out.println有替代方法吗?如果没有,你怎么建议我继续?我有Java Logging的建议,但我不想输出到文件。

6 个答案:

答案 0 :(得分:3)

您应该在大多数类中进行有限的用户交互,实际上UI代码应该在其自己的类集中分开。您应该努力编写模型(非UI)代码,以便它可以在控制台应用程序,Swing应用程序,SWT应用程序或其他UI库类型应用程序中正常运行。这样,您的代码可以在您认为合适的情况下使用SOP或GUI。我会打赌>专业编码人员创建的Java类中有90%没有UI代码。

另请注意,日志记录和用户交互代码是两个完全正交的概念。我将日志记录视为与开发人员和支持者沟通的方式,而不是用户。

答案 1 :(得分:2)

同意@ Hovercraft的评论。不要通过JPanel,在你的UI类中有一个static方法,所有其他对象在需要输出时调用。该方法将处理格式化和追加以及所有这些。

此外,在Java方面,println还没有替代方法。这是因为println只输出到stdout,而在GUI应用程序中它是隐藏的,除非用户从命令行执行你的程序。

答案 2 :(得分:1)

你想要的是一个可配置的日志框架,比如Log4j。通过编写自定义日志追加器,您可以将日志输出显示在任何您想要的位置,而不仅仅是文件中:http://www.javaworld.com/javaworld/jw-12-2004/jw-1220-toolbox.html

答案 3 :(得分:1)

原因是在生产环境中向stdout发送消息通常是不合适的。如果您正在编写库,则库应将信息返回给其调用者,而不是打印到stdout。如果您正在编写GUI应用程序,则应将信息呈现给用户,而不是stdout恰好指向的位置(可能无处)。如果您正在编写服务器(或在服务器端容器中运行的东西),那么您应该使用框架提供的任何日志记录工具。等等。

记录器能够定义记录消息的不同重要级别以及为输出使用不同接收器的能力 - 控制台,文件等。

使用记录器时,也很容易启用或禁用某种类型的消息 - 例如,您不希望在生产中看到每个调试消息。

我认为使用记录器不会在单元测试中提供任何明显的优势,但我甚至更喜欢它。在单元测试中,断言通常是我主要关注的问题。

顺便说一下,您应该考虑使用Commons LoggingSLF4J之类的东西作为日志框架外观 - 将代码绑定到特定的日志框架是不好的方式。如果您选择,通用日志和SLF4J可以轻松切换日志框架。

答案 4 :(得分:1)

向用户输出信息的最佳方法取决于您正在处理的应用类型。

如果您的应用程序是面向批处理且技术性很强,则可以将输出发送到滚动文本区域(JTextArea),以便用户可以查看最新状态并向后滚动以获取详细信息。

但如果它本质上更具交互性和技术性,那么您应该尝试将输出最小化到最重要的事情,例如高级状态消息或严重错误消息。在这种情况下,简单对话(JOptionPane)和状态栏(JLabel)可能是最好的。

在任何一种情况下,如果您的应用程序很大,您应该考虑进行设计,这样就不会将大量UI代码分散到其他所有内容中。将主逻辑与表示代码分开将有助于以后的维护。一种广为接受的方法是模型 - 视图 - 控制器(MVC)。

以下是一些很好的链接,可以帮助您开始使用MVC。

答案 5 :(得分:-3)

  

是否有替代System.out.println的良好做法?

返回