【问题标题】:Swing load available font family slow down the performanceSwing 加载可用的字体系列会降低性能
【发布时间】:2010-07-15 00:07:18
【问题描述】:

在我添加此代码以加载可用字体系列并将其添加到组合框后

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

当我触发页面时,它加载非常慢需要大约 7 秒才能显示页面。我把它拿出来后,它正常加载。有什么解决办法吗,有遇到同样问题的人吗?

【问题讨论】:

    标签: swing performance


    【解决方案1】:

    延迟是因为getAvailableFontFamilyNames 为它可以找到的每种字体创建一个 1 pt 字体。它允许 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 = new SwingWorker() { String[] fontNames = null;公共对象构造(){返回null; } protected void done() { for (int i = 0; i
    【解决方案2】:

    只需在应用启动时将其加载到后台 ()。当用户打开页面时,它将被加载。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-01
      • 2018-12-12
      相关资源
      最近更新 更多