2012-01-31 9 views
1

いくつかの折れ線グラフを描画するコードがあります(残念なことに私によって書かれたものではありません。 WindowsマシンとLinuxマシンでコードを実行すると、異なる結果が得られます.Linuxマシンでは、凡例の周りの境界線の高さが低くなり、結果として3つ以上の項目がある場合にはいくつかの醜い問題が発生します。伝説。WindowsとLinuxでJava awtコードを実行したときの結果が異なる

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

または問題が可能性を使用した場合

いくつかの既知の違いはありますか?

のWindows:

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) 

UPDATE:

それは一見唯一のLinuxのフォントではなく、窓のもので発生した丸めバグでした。奇妙な。

+0

各プラットフォームで異なる「LookAndFeel」を使用していますか? – Qwerky

+0

私はイメージファイルを作成するだけで、特別なものは設定されていません。 – brandstaetter

答えて

1

このメソッドは現在のフォントのフォントメトリックを返すgetFontMetrics()に基づいています。私はあなたのプログラムでデフォルトのフォントを使用していると仮定していますが、それらは異なるOSで異なっているため、結果の高さが異なる場合があります。

+0

ええ、値は正しいはずですか?フォントの周りにボックスを描くと、現在の高さを取得してその周囲にパディングを加えて描画するとうまくいくはずです。 – brandstaetter

+1

は正しい答えとして設定されています。ウィンドウでは、戻り値は整数ですが、 Linuxには丸めバグのために失われた倍精度の部分が追加されました。 – brandstaetter

1

あなたはさまざまなJava実装を使用していますが、この種のことが予想されます。 OpenJDKをアンインストールし、OracleのJavaをLinuxにインストールすることをお勧めします。

+0

いいえ、残念ながら、それは修正されませんでした。 Java HotSpot(TM)64-Bit Server VM(ビルド20.1-b02、ビルド20.1-b02)は、Javaのバージョン「1.6.0_26」 でも同じ結果です。 Java(TM)SEランタイム環境(ビルド1.6.0_26-b03) Java HotSpot混合モード) – brandstaetter

関連する問題