2010-07-13 50 views
1

後,我在此代碼添加到加載可用的字體系列和將它添加到組合框擺動負荷可用字體家族減慢性能

GraphicsEnvironment ge = GraphicsEnvironment. 
    getLocalGraphicsEnvironment(); 
String[] fontNames = ge.getAvailableFontFamilyNames(); 

它加載速度很慢了7秒左右,顯示在頁面我觸發該頁面。我把它拿出來後,它正常加載罰款。有沒有解決方案,任何人都面臨同樣的問題?

回答

1

延遲是由於getAvailableFontFamilyNames爲它可以找到的每種字體創建1磅字體。它允許JVM區分它可以使用的字體以及只有看起來像的東西,就像它們可能是字體一樣。

最好的方法是在SwingWorker中調用它,然後從done方法更新組合。

更新: 海報的代碼更新爲使用Generified SwingWorker。 注意:我將返回名稱數組,因爲它消除了同步的需要。

SwingWorker aWorker<String[],Void> = new SwingWorker<String[],Void>() { 
    protected void done() { 
     String[] fontNames = get(); 
     for (int i = 0; i < fontNames.length; i++) 
      fontFamily.addItem(fontNames[i]); 
    } 
    @Override 
    protected String[] doInBackground() throws Exception { 
     GraphicsEnvironment env = GraphicsEnvironment .getLocalGraphicsEnvironment(); 
     return env.getAvailableFontFamilyNames(); 
    } 
}; 
aWorker.run(); 
+0

嗨,我以這種方式做它是正確的? \t \t SwingWorker aWorker = new SwingWorker(){ \t \t \t String [] fontNames = null; \t \t \t公共對象構建體(){ \t \t \t \t返回NULL; \t \t \t} \t \t \t保護無效完成(){ \t \t \t \t對(INT I = 0;我 user236501 2010-07-14 04:18:57

+0

仍然有一些延遲,但更好得多謝謝你:) – user236501 2010-07-14 16:12:44

0

只需在應用程序啓動時將其加載到背景()中。到用戶打開頁面時,它將被加載。