控制台窗口,类似于windows" cmd.exe"

时间:2016-02-07 18:29:06

标签: java windows console

我最近编写了一艘"战舰"程序,现在正忙于改善用户友好性(如果这是英语中的正确单词^^)。考虑到您可以启动服务器,我想添加某种服务器控制台,您可以在其中获取状态报告(例如"播放器1已连接")并且可以输入命令,例如&# 34;停止"关闭服务器。

现在不幸的是,在浏览了几个google结果& stackoverflow帖子,我的印象是没有简单的方法来访问类似于Windows的控制台窗口。命令行(cmd.exe) - 这是正确的吗?显然,我可以创建一个带有JTextField的JFrame用于输入和一个不可用的JTextArea用于输出,但我觉得这非常优雅,考虑到我打印的大部分内容都是System.out.println()到目前为止应该出现在那里。

任何想法......?

1 个答案:

答案 0 :(得分:1)

JTextAreaJTextField的“控制台”有多常见?

如果您查看Minecraft,您可以看到JFrame JTextField用于输入下一个命令,而不可用的JTextArea实际上很常见。

您甚至可以通过调用System.out.println()将其设置为您自己的System.out来拦截System.setOut(),或实际使用PrintStream,这会将文字附加到上述JTextArea {1}}。

但是,有一些事情需要考虑。

您真的希望服务器依赖于Swing吗?

当您使用JFrame JTextFieldJTextArea作为服务器控制台时,服务器无法在无头环境中运行。适当的服务器可以在没有GUI的无头环境中运行,可以使用相应的基础设施(如init.d在服务器操作系统上启动它们(也可以作为Windows服务运行)。

这并不意味着你根本不能使用Swing。但是您应该考虑策略设计模式,并让用户控制是否应该为服务器启动Swing UI,或者只使用stdinstderr。用户自动化Swing UI也会更加困难。他们可以简单地从脚本中自动将命令序列传递给stdin。使用图形用户界面,这种自动化变得更加困难。

Java Readline Libraries

当您使用stdin / stderr进行服务器控制时,您可能希望通过使用模拟GNU readline某些行为的readline库来让用户感到舒适。

System.out不适用于记录。请改用System.err

使用System.out进行日志记录是一个常见错误。但这不是System.out的用途。 System.outstdout)用于程序的输出。例如,lsdir打印当前目录的文件。不包含程序主要输出的邮件应改为System.err

考虑一个日志框架

您希望实现的某些功能可能已在日志记录框架中提供。有一个附带Java,java.util.logging,还有更多的框架在野外。简单地打印到System.err,甚至更差System.out,被认为是一种非常弱,很差的日志记录,复杂的应用程序很快就会超过他们对日志记录的需求,使System.err非常不满意。