Swing загрузить доступное семейство шрифтов замедляет производительность - PullRequest
2 голосов
/ 13 июля 2010

После того, как я добавлю этот код, чтобы загрузить доступное семейство шрифтов и добавить его в выпадающий список

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

Загрузка очень медленно заняла около 7 секунд, чтобы показать страницу, когда я запускаю страницу. После того как я вытащу его, он нормально загружается. Есть ли какое-нибудь решение, есть ли люди, сталкивающиеся с той же проблемой?

Ответы [ 2 ]

1 голос
/ 14 июля 2010

Задержка связана с тем, что 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();
0 голосов
/ 13 июля 2010

Просто загрузите его в фоновом режиме () при запуске приложения. К тому времени, когда пользователь откроет страницу, она будет загружена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...