运行以下代码:
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);
}
}
产生了这个错误:
Exception in thread "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)处
以此类推...
为什么会这样呢?
new FontMetrics
,你需要从 某个地方 获取它。你没有在 EDT 中运行,也没有任何 Swing 组件 - 字体没有被渲染,那么它怎么能有宽度呢? - Boris the Spider