Java g.drawString () вызывает очень медленную инициализацию - PullRequest
0 голосов
/ 06 июля 2018

Следующий код обычно выдает около 1500-2000 мс, что слишком долго, чтобы просто нарисовать строку в JFrame.

public static void main(String[] args) {
    CustomFrame frame = new CustomFrame();
    frame.setVisible(true);
}

class CustomFrame extends JFrame {

public CustomFrame() {
    super();

    setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

    setPreferredSize(new Dimension(300, 300));

    pack();
}

@Override
public void paint(Graphics g) {
    super.paint(g);
    long s = System.currentTimeMillis();

    g.drawString("Hello", 50, 50);

    System.out.printf("Draw time: %dms\n", (System.currentTimeMillis() - s));
}

Кроме того, при запуске кода окно загружается немедленно, но до появления текста потребуется 1500-2000 мс. Та же проблема возникает при любых вызовах, связанных с текстом / шрифтом, включая JButtons с текстовыми метками. Даже эта строка:

System.out.println(g.getFont().toString());

приведет к замедлению.

Если я добавлю второй вызов drawString, между первой отображаемой строкой и второй нет паузы.

Это наводит меня на мысль, что это проблема с загрузкой библиотек на первой итерации, хотя я могу быть совершенно не прав

Любые идеи относительно того, что может быть причиной этого / как это исправить? Некоторое время был в тупике.

Приветствие.

...