所以我遇到的问题是我通过显示一个简单的菜单来启动我的应用程序。要正确调整文本大小并对齐,我需要获取字体指标,并且找不到快速执行此操作的方法。我测试了我的程序,它看起来像我用什么方法获取字体指标,第一次调用需要超过500毫秒!?因为启动我的应用程序所需的时间比所需的时间长得多。真的很慢获取字体指标
我不知道它是否是平台特定的,但为了以防万一,我在MacBook Pro上使用Mac OS 10.6.2(这里硬件不是问题)。
如果您知道更快地获取字体指标的方法,请帮忙。
我试过这3种方法获取字体指标,第一次调用总是非常慢,不管我选择哪种方法。
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.font.FontRenderContext;
import java.awt.font.LineMetrics;
import javax.swing.JFrame;
public class FontMetricsTest extends JFrame {
public FontMetricsTest() {
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
@Override
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
Font font = new Font("Dialog", Font.BOLD, 10);
long start = System.currentTimeMillis();
FontMetrics fontMetrics = g2.getFontMetrics(font);
// LineMetrics fontMetrics1 =
// font.getLineMetrics("X", new FontRenderContext(null, false, false));
// FontMetrics fontMetrics2 = g.getFontMetrics();
long end = System.currentTimeMillis();
System.out.println(end - start);
g2.setFont(font);
}
public static void main(String[] args) {
new FontMetricsTest();
}
}
我有该程序的下一次运行(操作系统,JDK 1.6.0_18)所述第一运行和20ms的〜0.6秒。所以可能与磁盘缓存中的字体文件有关? – 2010-03-16 15:02:01
可能是与连接字体服务器相关的问题?(我听说有一个小程序会杀死运行字体服务器的机器(包括Solaris机器),但那已经是十多年前的事了)。我放入缓存清理问题,尽管我猜这是不行的如果图形对象可能应用了变换,则工作得很好。 – 2010-03-16 16:32:37
(呵呵,还有一个'Font'的缓存,你可以在API文档中看到他们有一个'finalize',但没有'dispose' ......) – 2010-03-16 16:33:55