2009-05-15 9 views
5

私が書いたJavaスイングGUIプログラムのユーザーの一人は、メインスイングウィンドウが画面に正しく表示されず、GUIがフリーズするという問題があります。ここで彼の画面上のスクリーンショットの比較(上)、何(下)に表示することになっているのです。Javaスイングウィンドウが壊れています

alt text http://www.shapecollage.com/temp/SwingCorruption.jpg

彼は、Java 1.6.0_13を使用してWindows XP SP3を実行しているし、彼のグラフィックカードはATIありますX1600にはデュアルモニター設定があります。私は数千人のユーザーを持っていると誰もがこのエラーを報告していないと私はWindows XP上で徹底的にテストしている
www.shapecollage.com/download.html

プログラム(あなた自身のためにテストしたい場合は)です。何か計算は、通常のGUIスレッドとは別のスレッドで行われ、プログラムは他の多くのコンピュータで動作するので、プログラム自体に問題はないと思いますが、彼の特別な設定では間違っています。

システム上でこのタイプのエラーが発生したことがある人はいませんか、またはこのような問題を引き起こす可能性のあるユーザのシステムに何か問題があると思われるものはありますか?

おかげで、
ヴィンセント

+1

興味深い。そのような問題は1年か2年前に私に報告されました。私はそれを再現することはできませんでしたので、おそらくドライバのバグとしてそれを閉じました。私はここに良い答えがあるかどうかを知ることに興味があります。 –

+0

Yikes!それが悪いのは、jvmとグラフィックドライバの関係でなければなりません。あなたができることはたくさんあります。 – Tom

+0

プログラムが読み込まれると、レンダリングにはいくつかのマイナーな、しかし明らかなアーチファクトがあり、実際にインターフェイスを使用しようとすると、明らかに狂って凍結します。デスクトップや他のいくつかのコンピュータでこれを複製することはできません。 – Vincent

答えて

2

非常に似た問題がありましたが、これはグラフィックドライバを更新することで修正されました。この問題は、デュアルモニターの設定がVRAMの破損につながる場合があるため、お客様が単一のモニターでよりうまく動作するかどうか試してみる可能性があります。 Javaがハードウェアにあまり依存しないことが予想されるかもしれませんが、私たちのグラフィックスに敏感なアプリケーションは、特定のプロジェクタタイプを実行すると常にBSODを管理します...

+0

ユーザーがグラフィックスカードドライバを更新し、問題を修正しました。 – Vincent

0

は、Swingを使用すると、GUIスレッド以外の場所のレンダリングをやっている場合、あなたはこの種のものを期待することができますので、スレッドセーフではありません。

+0

レンダリングはGUIスレッドでのみ行われます。このプログラムは、他の何千ものコンピュータで正常に動作します。 – Vincent

1

この特定の種類のグラフィックは表示されませんでしたが、拡張ディスプレイコントロールパネルのハードウェアアクセラレーションが低下すると、WindowsのJavaグラフィックスの問題が消えてしまいました。

0

私はそれのような壊れたグラフィックスを見たことがありますが、決してjavaではありません。私が見た場所は、Windowsの描画/ etcコードであり、タイリングとスノーの見た目は、一般的には、イメージの描画コードに特定のサイズとビット深度のイメージを描画するよう指示したが、異なるビット深度を有する画像バッファを含む。バイト配列に整数RGBAソースからのデータを埋め込んで整数RGBデスティネーションに入れるのが好きですか?

しかし、スクリーンショットでは、最小化/最大化/閉じるボタンによる余分なボタンがあるため、ユーザーは他の種類のアプリも実行しているように見えるので、他のサードパーティ製のアプリケーションがウィンドウを変更しています。多分それはそれを乱している?

それ以外の場合は、ドライバの問題があります。 d3d描画や他の描画最適化を無効にするなど、VMが自動的に行ういくつかの解決策があります。

6

多分Javaとグラフィックドライバやグラフィックスハードウェアの間に問題のある相互作用があります。

several flags that can influence how Java draws to the screenがあります。

あなたがそれらのフラグのいずれかでアプリケーションを起動しようとする場合があります:

  • -Dsun.java2d.opengl=true
  • -Dsun.java2d.d3d=false
  • -Dsun.java2d.noddraw=true

それらのフラグが使用してのOpenGLパイプライン、ターンを切り替えますDirect3Dを使用し、DirectDrawの使用をそれぞれ無効にします。

これらのいずれかで問題が解決した場合は、太陽に不具合を報告することを検討することもできます。なぜなら、ここでは問題のあるアプリケーションではないからです。

+1

問題を解決した-Dsun.java2d.d3d = falseという関連問題がありました。 http://stackoverflow.com/questions/848481/problem-with-painting-in-java-swing-app-in-java-1-6を参照してください。 – Avrom

+1

Year 2015:Ubuntu 14.04では、すべてのguiコントロールのグラフィックスの破損、私自身のアプリケーションと私が使用するサードパーティのアプリケーションでは、 -Dsun.java2d.opengl = trueのいずれかを起動すると問題が解決しました。これはNVidiaカードで発生します。私はIntelsはOKだと思います。 –

関連する問題