2012-04-28 6 views
3

Java Graphics2D draw Stringの非常に奇妙な動作が発生しました。私は、このようなJava Swing Graphics2D drawString slow initiation?

Font f = new Font("Helvetica", Font.PLAIN, 10); 

としてフォント名を設定した場合

は、次にスクリーンデバイス上g2D.drawStringの最初の呼び出しは、600msの限りを取ることができます。これはスクリーンジャムを生み出しますが、重要ではありませんがかなり迷惑です。

"Monospaced"などのフォント名をデフォルトに変更すると、問題が解決されます。

誰でも同じような問題が発生しましたか?

+5

起動時に必要な 'Font'インスタンスを読み込まないのはなぜですか? –

+1

また、フォントファミリー「Font.SANS_SERIF」をリクエストしますか? – trashgod

答えて

3

これは、(最初​​に文字列をペイントするときに)ペイントメソッド内でフォントを読み込んでいるために起こります。これは悪いことです。コンポーネントのフォントを使用する唯一のフォントである場合、またはコンポーネントをペイントする前に少なくともそれをロードする必要があります。

+0

こんにちは@ mgarinいいえ私は、Fontがpaintメソッドの中にロードされていないことを確認しました。私はコンストラクタにフォントをロードしました。最初のドローには時間がかかりました。 別の奇妙なことに、バッファリングされたイメージを作成すると、bufferedImage.createGraphics()は500〜600msかかることもあります。私が使用しているiMacであるかどうかはわかりません - Windows 7をiMac 27で実行しています。 ありがとうございました! –

+0

ペイントメソッド呼び出しの前に、どのくらい正確にフォントを読み込みますか? "Font font = new Font(...);"のような行を追加するだけで、そのFontを初期化しません。最初の実際のペイントコールでロードされる実際のフォントを操作するFontオブジェクトを作成します。私はbufferedImage.createGraphics()がいくつかの大きな画像(例えば5000x5000)を作成しているとしばらく時間がかかるかもしれないと思いますが、わかりません - 別の質問でその問題のコードを提供してください... –