获取 FontMetrics StackOverflowError

geo*_*geo 5 java stack-overflow fonts awt fontmetrics

运行以下代码:

import java.awt.Font;
import java.awt.FontMetrics;

public class MetricsTest {

    public static void main(String[] args) {
                Font myFontTest=new Font("Arial", Font.PLAIN, 11);
                FontMetrics metrics  = new FontMetrics(myFontTest) {};
                int characterWidth=metrics.charWidth('A');
                System.out.println(characterWidth);
    }
}
Run Code Online (Sandbox Code Playgroud)

产生这个错误:

线程“main”中的异常 java.lang.StackOverflowError

在 java.awt.FontMetrics.getWidths(FontMetrics.java:430)

在 java.awt.FontMetrics.charWidth(FontMetrics.java:333)

在 java.awt.FontMetrics.getWidths(FontMetrics.java:430)

在 java.awt.FontMetrics.charWidth(FontMetrics.java:333)

在 java.awt.FontMetrics.getWidths(FontMetrics.java:430)

等等....

为什么?

geo*_*geo 2

这是一个解决方案:(
请参阅用户 Boris the Spider 在我的原始帖子上的评论)

import java.awt.Canvas;
import java.awt.Font;
import java.awt.FontMetrics;

public class MetricsTest {

    public static void main(String[] args) {
                Font myFontTest=new Font("Arial", Font.PLAIN, 11);
                Canvas c = new Canvas();
                FontMetrics fm = c.getFontMetrics(myFontTest);
                int characterWidth=fm.charWidth('A');
                System.out.println(characterWidth);

    }

}
Run Code Online (Sandbox Code Playgroud)