2010-07-13 71 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

只需在应用程序启动时将其加载到背景()中。到用户打开页面时,它将被加载。