4

我将开始设计一个控制台应用程序。这意味着类似于 MySQL 客户端,它提示用户输入命令然后执行它们(基本上是打开和监听 TCP 端口,管理一些基本的数据库操作和服务器管理的东西)。该应用程序基本上接受连接并将数据返回给客户端。

我希望这个应用程序根据应用程序的启动方式在 GUI 和控制台模式下运行(这里没问题)

GUI不是问题,而是控制台。我需要的是一种定义一组命令的方法,它们可能有也可能没有任何数量的参数。此命令可能会提示确认、密码或返回一组数据。我想让事情保持优雅、可维护,并避免构建可能失控的“有限状态机”。

我想实现类似:

[ready]> server:start;
Server started.
[running]> connections:list;
Conn     IP             Port
Name1    192.168.2.2    60000
Name2    192.168.2.4    60002
[running]> connections:close Name1;
1 connection closed.
[running]> server:stop;
password? ******
Server stopped.
[ready]>

是否有任何框架、工具或技术可以在 Java 上实现这一目标?

4

4 回答 4

4

There's the recently (very recently) released Spring Shell. It's what Spring used to power their Roo shell minus the Roo parts. You can plug your own commands into it and make use of its ability to record scripts, play back scripts, take parameters, change the prompt, etc.

I looked at the example that came with it and it had four different classes that added or changed various things and it seemed pretty straightforward.

于 2012-07-24T20:59:07.917 回答
2

我过去使用过clamshell-cli,并没有做任何太复杂的事情,但它似乎有很多功能。

于 2012-07-24T20:52:44.413 回答
1

有一个命令行解析器Picocli。它于 2017 年 9 月推出,已被 Groovy、Micronaut 和 JUnit 用作命令行。

它具有以下特点:

  • 自动完成
  • ansi 颜色和样式
  • 很好的用户帮助
  • 支持子命令
于 2018-09-15T10:41:04.833 回答
0

One way to implement this would be via reflection. you would define fields server and connections and give them the methods you need (start() stop() close()). Then when input is parsed, use the reflection mechanism to execute methods you need.

于 2012-07-24T20:59:25.263 回答