Задержка связана с тем, что 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();