我编写的某些代码存在问题,我认为这只是我的逻辑错误。但是,我将问题归结为以下内容,并且不了解发生了什么事情:
使用此类
public class Why extends Application
{
@Override
public void start(Stage arg0) throws Exception
{
System.out.println(textHeight("X", 5, TextBoundsType.LOGICAL)); // A
System.out.println(textHeight("X", 5, TextBoundsType.LOGICAL_VERTICAL_CENTER)); // B
System.exit(0);
}
public double textHeight(String text, double size, TextBoundsType tbt)
{
Text t = new Text(text);
t.setBoundsType(tbt);
t.setFont(Font.font("arial", size));
return t.getLayoutBounds().getHeight();
}
public static void main(String[] args)
{
launch(args);
}
}
如果运行该程序并观察每个函数调用的输出,然后交换注释的A和B行并运行,则带有“ LOGICAL”界限的调用输出将更改。这很奇怪,因为我看不到函数“ textHeight”是不是纯净的。此外,如果您更改了调用中的大小或文本参数,使它们在两行上都不相同,则此行为将消失。我正在用jre1.8.0_121运行该程序,这可能是潜在的错误,还是我丢失了某些东西?