在 Windows 系统中通过 .bat 脚本启动多个 JFinal 应用时,CMD 窗口默认标题通常是 C:\Windows\System32\cmd.exe 或脚本路径。当同时运行多个服务(如前台、后台、API、定时任务等),窗口看起来几乎一模一样,极易误关或混淆,严重影响开发与运维效率。
为解决这蛋疼的事儿,可以在 Java 启动阶段自动设置有意义的控制台窗口标题,例如:
JFinal会员系统 1.0.0 - 正在运行 (PID: 12345)
这样每个服务窗口身份一目了然,避免误操作。
实现方式(无需修改 .bat)
在你的 appConfig.java 中加入以下静态初始化代码:

public class AppConfig extends JFinalConfig {
....
/**
* 项目关闭之前回调
*/
@Override
public void onStop() {
}
// >>>>>>>>>>>>>>> 由Java负责设置控制台标题(仅 Windows),内容完全由 Java 控制(支持动态变量、国际化等) <<<<<<<<<<<<<<<<<<<
static {
// 设置控制台标题(仅 Windows)
if (System.getProperty("os.name").toLowerCase().contains("windows")) {
try {
String title = "title " + getProjectName() + " " + getProjectVersion() + " - 正在运行 (PID: " + getProcessId() + ")";
new ProcessBuilder("cmd", "/c", title).inheritIO().start().waitFor();
} catch (Exception e) {
// 忽略错误(非 Windows 或无权限)
}
}
}
private static long getProcessId() {
try {
String name = java.lang.management.ManagementFactory.getRuntimeMXBean().getName();
return Long.parseLong(name.split("@")[0]);
} catch (Exception e) {
return -1;
}
}
// >>>>>>>>>>>>>>> 由Java负责设置控制台标题(仅 Windows),内容完全由 Java 控制(支持动态变量、国际化等) <<<<<<<<<<<<<<<<<<<
public static void main(String[] args) {
UndertowServer.create(AppConfig.class,"undertow.properties").start();
}
}start.bat文件中在 “@echo off” 后面加入一行 “chcp 65001 >nul” 防止乱码:
优势:
标题由 Java 控制,支持动态内容(如环境、版本、端口)
无需维护
.bat文件中的中文(避免编码问题)自动获取真实进程 ID,便于排查
启动即生效,所有窗口身份清晰
效果对比

⚠️ 注意事项
仅适用于 Windows CMD 窗口
若应用以服务方式后台运行(无窗口),此设置无效
标题中的特殊字符(如
&,|)需额外转义,普通中文+数字无需处理

