You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中ANSI颜色代码在VS Code终端生效但CMD无效的问题

Java控制台彩色文本在Windows CMD中不生效的解决办法

你的Java代码通过ANSI转义序列设置文本颜色,在VS Code终端能正常显示彩色效果,但在Windows原生CMD中运行时,转义字符会直接以←[31m这类形式输出,无法渲染成对应颜色。

问题原因

Windows CMD默认不支持解析ANSI转义序列,需要手动开启虚拟终端支持,或者通过代码层面做跨平台适配。

解决方案

1. 直接开启CMD的ANSI支持

  • 注册表永久开启
    打开注册表编辑器(运行regedit),定位到HKEY_CURRENT_USER\Console,右键新建DWORD(32位)值,命名为VirtualTerminalLevel,设置值为1,重启CMD后生效。

  • 命令临时开启
    在CMD中执行以下命令,然后重启CMD:

    reg add HKCU\Console /v VirtualTerminalLevel /t REG_DWORD /d 1
    

2. Java代码层面适配Windows

通过JNA调用Windows API,在代码中动态启用虚拟终端处理,无需手动修改系统设置:

import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.platform.win32.WinNT;

public class ConsoleColor {
    private static final int ENABLE_VIRTUAL_TERMINAL_PROCESSING = 0x0004;

    public interface Kernel32 extends Library {
        Kernel32 INSTANCE = Native.load("kernel32", Kernel32.class);
        WinNT.HANDLE GetStdHandle(int nStdHandle);
        boolean GetConsoleMode(WinNT.HANDLE hConsoleHandle, int[] lpMode);
        boolean SetConsoleMode(WinNT.HANDLE hConsoleHandle, int dwMode);
    }

    public static void enableAnsiSupport() {
        // 获取标准输出句柄
        WinNT.HANDLE handle = Kernel32.INSTANCE.GetStdHandle(-11);
        int[] mode = new int[1];
        if (Kernel32.INSTANCE.GetConsoleMode(handle, mode)) {
            // 启用虚拟终端处理
            mode[0] |= ENABLE_VIRTUAL_TERMINAL_PROCESSING;
            Kernel32.INSTANCE.SetConsoleMode(handle, mode[0]);
        }
    }

    public static void main(String[] args) {
        enableAnsiSupport();
        System.out.println("\u001B[33mThis text is yellow\u001B[0m");
    }
}

使用这段代码需要添加JNA依赖,Maven项目可在pom.xml中加入:

<dependency>
    <groupId>net.java.dev.jna</groupId>
    <artifactId>jna</artifactId>
    <version>5.13.0</version>
</dependency>
<dependency>
    <groupId>net.java.dev.jna</groupId>
    <artifactId>jna-platform</artifactId>
    <version>5.13.0</version>
</dependency>

3. 使用第三方跨平台库(推荐)

用Jansi库自动处理不同平台的控制台颜色支持,无需关心系统差异:

Maven依赖:

<dependency>
    <groupId>org.fusesource.jansi</groupId>
    <artifactId>jansi</artifactId>
    <version>2.4.0</version>
</dependency>

示例代码:

import org.fusesource.jansi.Ansi;
import static org.fusesource.jansi.Ansi.ansi;

public class JansiColorDemo {
    public static void main(String[] args) {
        System.out.println(ansi().fg(Ansi.Color.YELLOW).a("This text is yellow").reset());
    }
}

运行后,无论是VS Code终端还是Windows CMD,都能正常显示彩色文本。

内容的提问来源于stack exchange,提问作者Annas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 16:15:43