在Windows和Linux上运行java awt代码时会出现不同的结果

我有一些代码(不幸的是不是我写的,否则我会知道从哪里开始寻找解决scheme),绘制一些线图。 当我在我的Windows机器和Linux机器上运行代码时,我得到了不同的结果:在Linux机器上,图例周围的边界被绘制的高度较低,导致一些丑陋的问题,当有超过3个项目传说。

使用时有一些已知的差异

int getHeight(Graphics2D g, String text) { Rectangle2D bounds = g.getFont().getStringBounds(text, g.getFontMetrics().getFontRenderContext()); return bounds.getHeight(); } 

或者问题在哪里?

视窗:

 C:\>java -version java version "1.6.0_26" Java(TM) SE Runtime Environment (build 1.6.0_26-b03) Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02, mixed mode) 

Linux的:

 $ java -version java version "1.6.0_20" OpenJDK Runtime Environment (IcedTea6 1.9.10) (6b20-1.9.10-0ubuntu1~10.04.3) OpenJDK 64-Bit Server VM (build 19.0-b09, mixed mode) 

更新:

这是一个圆滑的bug,似乎只发生在Linux字体,而不是Windows的。 奇怪。

您的方法基于getFontMetrics() ,它返回当前字体的字体指标。 我假设你在程序中使用了默认的字体,而在不同的操作系统中它们是不同的,所以结果的高度可能会有所不同。

你正在使用不同的Java实现,这种事情是可以预料的。 我建议您卸载OpenJDK并在Linux中安装Oracle的Java。