方法无缘无故关闭程序

时间:2018-06-20 20:03:22

标签: java string swing

在我的大学项目中,我需要显示球员的姓名及其得分。 我希望它看起来像这样:

Name1 . . . . . . . . 1200
Another Name . . . . . . 3
A Very Very Long name  . 2

为了知道点数,我需要知道屏幕上字符串的长度,因此所有字符串的长度都相同。 text.length无济于事,因为像l这样的字母比T占用更少的空间。

在互联网上看了一段时间之后,我发现有人说,为了在屏幕上显示字符串的长度,我可以这样做:

private int stringViewLength(String text) {
    AffineTransform affinetransform = new AffineTransform();     
    FontRenderContext frc = new FontRenderContext(affinetransform, true, true);     
    Font font = new Font(FONT, Font.PLAIN, FONT_SIZE);

    int textWidth = (int)(font.getStringBounds(text, frc).getWidth()); // This line causes problems
    int textHeight = (int)(font.getStringBounds(text, frc).getHeight()); // Not in use

    return textWidth;
}

问题是该行:

int textWidth = (int)(font.getStringBounds(text, frc).getWidth()); // This line causes problems

由于某种原因,将不允许程序运行。它不会引发任何异常,也不会返回意外的值,也不会关闭程序。 调试后,我看到只要执行了这一行, 在main函数的末尾,由于某种原因,调用了exit()中的方法Thread,但是当我注释此行时(并用return语句替换为const number),该行将显示在屏幕上。

什么会导致此问题?谢谢!

1 个答案:

答案 0 :(得分:1)

我认为您正在过度设计解决方案。您不能轻易地以非等宽字体对齐任何文本。只需使用Courier,然后继续学习构建应用程序的目的即可。有时最好的教训是使用最简单的解决方案。