Swing load可用字体系列会降低性能

Swing load可用字体系列会降低性能,swing,performance,Swing,Performance,在我添加这段代码后,我将加载可用的字体系列并将其添加到combobox中 GraphicsEnvironment ge = GraphicsEnvironment. getLocalGraphicsEnvironment(); String[] fontNames = ge.getAvailableFontFamilyNames(); 当我触发页面时,显示页面的速度非常慢,大约需要7秒钟。我把它拿出来后,它就像平常一样好。有没有解决方案,有没有人面临同样的问题?只要在应用程序启动时在后台

在我添加这段代码后,我将加载可用的字体系列并将其添加到combobox中

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

当我触发页面时,显示页面的速度非常慢,大约需要7秒钟。我把它拿出来后,它就像平常一样好。有没有解决方案,有没有人面临同样的问题?

只要在应用程序启动时在后台()加载即可。当用户打开页面时,它将被加载

延迟是因为
getAvailableFontFamilyNames
为它能找到的每种字体创建一个1磅字体。它允许JVM区分它可以使用的字体和看起来可能是字体的东西

最好的方法是在
SwingWorker
中调用它,然后从
done
方法更新组合

更新: 海报的代码更新为使用通用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();
SwingWorker aWorker=新的SwingWorker(){
受保护的void done(){
字符串[]fontNames=get();
对于(int i=0;i
嗨,我是这样做的,对吗?SwingWorker aWorker=new SwingWorker(){String[]fontNames=null;public Object construct(){return null;}protected void done(){for(int i=0;i