1

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

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

System.out.println 有没有好的替代方法?如果没有,你建议我如何进行?我有 Java Logging 的建议,但我不想输出到文件。

4

6 回答 6

3

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

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

于 2013-05-19T00:34:53.940 回答
2

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

println此外,在 Java方面没有真正的替代方案。那是因为 println 只输出到标准输出并且在 GUI 应用程序中它是隐藏的,除非用户从命令行执行你的程序。

于 2013-05-19T00:35:09.050 回答
1

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

于 2013-05-19T00:33:32.740 回答
1

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

记录器能够定义所记录消息的不同重要性级别,并能够使用不同的接收器进行输出 - 控制台、文件等。

此外,在使用记录器时,仅启用或禁用某种类型的消息也很容易——例如,您不想在生产中看到每条调试消息。

我不认为使用记录器在单元测试中提供任何显着优势,但我还是更喜欢它。在单元测试中,断言通常是我最关心的问题。

顺便说一句,你真的应该考虑使用像Commons LoggingSLF4J这样的东西作为日志框架外观——将你的代码绑定到特定的日志框架是不好的风格。如果您愿意,Common Logging 和 SLF4J 可以让您轻松切换日志框架。

于 2013-05-19T00:40:53.433 回答
1

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

如果您的应用程序面向批处理且技术含量很高,则可能适合将输出发送到滚动文本区域 (JTextArea),以便用户可以查看最新状态并在需要时回滚以获取详细信息。

但是,如果它本质上更具交互性且技术含量较低,则应尝试将输出最小化为仅最重要的内容,例如高级状态消息或严重错误消息。在这种情况下,简单的对话 (JOptionPane) 和状态栏 (JLabel) 可能是最好的。

无论哪种情况,如果您的应用程序很大,您应该考虑对其进行设计,以免将大量 UI 代码分散到其他所有内容中。将主要逻辑与表示代码分开将有助于以后的维护。一种被广泛接受的方法称为模型-视图-控制器 (MVC)。

这里有几个很好的链接可以帮助你开始使用 MVC。

于 2013-05-19T03:06:53.143 回答
-3

System.out.println 有没有好的替代方法?

返回

于 2013-05-19T17:16:28.717 回答