
以前写Java,后端一气呵成,Spring Boot跑起来比泡面还快。可只要一碰终端界面——就是另一场噩梦。Swing太老,JavaFX又重得像扛着服务器进电梯;用JLine手撸?连个进度条都要自己算光标位置。更别提什么内存监控、实时图表、交互式菜单了,搞半天才画出一行带颜色的文本,旁边Rust开发者已经用Ratatui刷出带动画的系统面板了。
就在2026年2月下旬,GitHub上一个叫Tamboui的仓库悄悄更新了一版。没通稿,没发布会,就一条commit message:“fix sparkline y-axis scaling in low-res terminals”。但星标数已爬到252,fork 20个——不多,可全是带.java后缀的star。我试了下,Java 17环境下,三行依赖加一个Text.of("Hello").centered().build(),回车就弹出居中文字。没有main方法之外的配置类,没有@SpringBootApplication,没有ApplicationRunner。你甚至不用关掉IDE,直接mvn exec:java,终端里那行字就稳稳站在屏幕正中央,像被磁吸住了一样。
它背后其实挺“野”的:不搞声明式UI那一套,渲染逻辑就写在lambda里,每次重绘都重建整个UI树,状态?不存在的。你要改数据,改完再调一次Tui.run(),它就重新来过。这种“立即模式”,初看有点反直觉,但写两个demo就上头——系统监控那个例子,CPU负载实时抓OperatingSystemMXBean.getSystemCpuLoad(),内存趋势用Sparkline.of(new double[]{0.3, 0.4, 0.35, 0.5, 0.45, 0.6, 0.55}),七行数据七个点,连轴线都不用画。BarChart demo更绝,五组“1日-5日”访问量,数值一换,柱子自动跟着长高,标题悬在顶部,连padding都默认调得刚刚好。
它还偷偷塞了个狠招:原生镜像支持。我用GraalVM 22.3编译完,生成的chart-demo文件直接双击运行,从敲命令到图表出来,0.17秒。对比普通jar包启动要1.8秒——不是快一点,是快了一个数量级。这种速度,在终端场景里,就是“按回车=立刻响应”的体感差别。
当然,它现在还是个活物。0.1.0-SNAPSHOT版本,API随时会动。昨天我照文档写的Panel.withBorder(),今天拉最新源码发现接口名改成Panel.bordered()了。组件库也单薄,想做个带搜索过滤的下拉列表?得自己啃JLine3Backend的事件循环。不过,它至少让Java终端开发从“要不要做”变成了“先做出来再说”。
GitHub上有个issue写着:“希望支持键盘焦点管理”。底下有人回复:“+1,我正用Tamboui写内部DB CLI,用户抱怨Tab切不到第二个输入框……但,谢谢,至少我现在敢交货了。”
对吧?
你上次交一个带UI的Java CLI工具,是什么时候?