所以我遇到的問題是我通過顯示一個簡單的菜單來啓動我的應用程序。要正確調整文本大小並對齊,我需要獲取字體指標,並且找不到快速執行此操作的方法。我測試了我的程序,它看起來像我用什麼方法獲取字體指標,第一次調用需要超過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