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

CentOS服务器下Java 2D drawString中文字符显示方框问题

解决CentOS下Java 2D drawString中文字符显示方框问题

嘿,咱们来搞定CentOS上Java 2D的drawString方法把中文字符显示成方框(俗称“豆腐块”)的问题。从你贴的fc-list输出来看,系统里确实装了文泉驿等宽微米黑,但Java的字体渲染逻辑没正确关联到中文字体,导致中文字符没法正常渲染。下面是一步步的排查和解决办法:

1. 补装更通用的中文字体(可选但推荐)

CentOS默认的中文字体包可能不够全,先装几个常用的中文字体,确保有足够的 fallback 选项:

  • 安装文泉驿微米黑(确保是完整版本):
    yum install wqy-microhei-fonts -y
    
  • 如果需要更通用的宋体(很多Java程序默认优先找这个),可以装:
    yum install cjkuni-ukai-fonts -y
    

装完后刷新系统字体缓存:

fc-cache -fv

2. 在代码里直接指定中文字体(最快见效)

最直接的办法是在调用drawString前,明确指定系统中已有的中文字体,让Java不用猜该用什么字体:

// 用你系统里已有的文泉驿等宽微米黑
Font chineseFont = new Font("WenQuanYi Micro Hei Mono", Font.PLAIN, 14);
// 如果装了宋体,也可以用这个:Font chineseFont = new Font("SimSun", Font.PLAIN, 14);

// 把字体设置到Graphics对象上
graphics.setFont(chineseFont);
graphics.drawString("测试中文显示", 20, 20);

这样Java会直接用指定的中文字体渲染,不会再出现方框。

3. 全局配置Java字体 fallback(不用改代码)

如果不想修改代码,可以调整Java的字体配置,让它默认把中文字体加入 fallback 列表:

  1. 找到Java安装目录下的jre/lib/fontconfig.properties(比如OpenJDK的路径可能是/usr/lib/jvm/java-1.8.0-openjdk/jre/lib/fontconfig.properties)
  2. 打开文件,找到sequence.allfonts这一行,在末尾添加中文字体的家族名,比如:
    sequence.allfonts=... WenQuanYi Micro Hei Mono, SimSun
    
    (注意保留原有内容,只把中文字体加在最后)
  3. 保存后重启你的Java应用,配置就会生效。

4. 验证Java是否识别到中文字体

可以写个小工具类,列出Java能识别的所有字体,确认中文字体在列表里:

import java.awt.Font;
import java.awt.GraphicsEnvironment;

public class ListJavaFonts {
    public static void main(String[] args) {
        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
        for (Font font : ge.getAllFonts()) {
            System.out.println("可用字体:" + font.getFamily());
        }
    }
}

编译运行后,看看输出里有没有WenQuanYi Micro Hei Mono或者SimSun,有的话说明Java已经能找到中文字体了。

5. 检查Java渲染依赖库

CentOS上的OpenJDK需要依赖fontconfig和libXrender来正常渲染字体,确保这些库已经安装:

yum install fontconfig libXrender -y

装完后重启Java应用,避免依赖缺失导致的字体渲染问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:23:51