首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取FontMetrics StackOverflowError

获取FontMetrics StackOverflowError
EN

Stack Overflow用户
提问于 2014-03-04 16:48:14
回答 3查看 1.5K关注 0票数 5

运行以下代码:

代码语言:javascript
复制
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);
    }
}

产生此错误:

线程"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)

等等..。

为什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-03-04 17:08:08

以下是一个解决方案:

(见用户的评论)

代码语言:javascript
复制
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);

    }

}
票数 2
EN

Stack Overflow用户

发布于 2014-03-04 16:50:28

来自医生

注意子类:由于这些方法中有许多是封闭的、相互递归的循环,因此必须注意在每个此类循环中至少实现一个方法,以防止在使用子类时出现无限递归。特别是,以下是为确保正确性和防止无限递归(尽管其他子集同样可行)而建议的最小方法集:

这是:

代码语言:javascript
复制
FontMetrics metrics  = new FontMetrics(myFontTest) {};

定义一个没有重写任何方法的子类,因此您将看到这样的行为。

票数 3
EN

Stack Overflow用户

发布于 2014-03-04 17:10:03

按照以下方式重写代码:

代码语言:javascript
复制
try {
    Font myFontTest=new Font("Arial", Font.PLAIN, 11);
    Frame f = new Frame();
    //FontMetrics metrics = f.getToolkit().getFontMetrics(myFontTest);      
    FontMetrics metrics = Toolkit.getDefaultToolkit().getFontMetrics(myFontTest);

    int characterWidth=metrics.charWidth('A');
    System.out.println(characterWidth);
} catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22177948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档