5

ある種の再描画の問題がある Swing アプリケーションがあります。画面 (JFrame) を閉じると、その画面のアーティファクトが他の画面に重ねて描画されることがあります。私たちのオフィスにある 100 台以上の開発マシンと、このソフトウェアを使用している何千人ものユーザーのほとんどでは、まったく再現できません。過去数年間、この問題に関する報告が散見されてきましたが、私たちは常にグラフィック カードまたはドライバーのせいにしてきました。ただし、この問題の報告数はここ数か月で急増しているため、本当の原因を突き止める必要があります。

ほとんどすべてのクライアントが Windows で実行されており、Windows 7 と 8 の両方のマシンに影響します。通常、JRE 1.6.0_29 で実行しますが、この問題は 1.6.0_45 および 1.7.0_51 でも発生します。

下の図は、この問題を示しています。アーティファクトの輪郭を赤で示しました。これは、閉じられた別の JFrame の一部です。JFrame が表示されたとき、画面上のその場所にはありませんでした。また、アーティファクトのすぐ上にある JTable の列が外れていることにも注意してください。最後に、アーティファクトが JTable だけに描画されるのではなく、画面の一番下にある親 JScrollPane と別の JPanel に描画されることに注意してください。

誰でもこれを引き起こす可能性のあるアイデアはありますか?

ここに画像の説明を入力

4

2 に答える 2

6

ここでこの問題を「クローズ」(つまり、回答) するために、コメントの結果:

Marco13 : 私はそのようなエラーに遭遇したことはありませんが、試してみる価値があるかもしれません -Dsun.java2d.opengl=true または -Dsun.java2d.d3d=false

( http://docs.oracle.com/javase/7/docs/technotes/guides/2d/flags.html#d3dにリストされている VM フラグを参照)

Jason : -Dsun.java2s.d3d を追加すると、問題が修正されました。

(デフォルトで有効になっているため、これは-Dsun.java2s.d3d= falseの設定を指していると思います)


最後のコメントからの質問について:

" (データ入力アプリケーションで) Direct3D サポートを有効にすると、何らかのパフォーマンス上の利点があると思いますか? "

私はまだd3dフラグを使用していませんが、いくつかの実験ではフラグのみを使用してopenglおり、パフォーマンス テストには使用していません。したがって、このフラグがパフォーマンスにどの程度影響するかはわかりません。繰り返しますが、私の直感では、単純なアプリケーションの場合、これは実際には目立った影響を与えるべきではありません. Graphics2D「シンプル」とは、標準の GUI コンポーネントのみを使用し、オーバーライドされた in を介して複雑なカスタム レンダリング操作を実行しないアプリケーションを意味します。paintComponent方法。しかし、スクリーンショットによると、このアプリケーションには少なくとも、Swing に存在する最も複雑な「標準 GUI コンポーネント」、つまり JTable が含まれている可能性があります。たとえば、ScrollPane に大きな JTable があり、複雑なカスタム CellRenderer を使用している可能性がある場合は、可能であれば、ターゲット マシンの一部 (できれば最も遅いマシン) でパフォーマンスへの影響を専用にテストすることを検討する必要があります。

于 2014-02-12T14:34:37.260 に答える
4

「-Dsun.java2d.opengl=true」は、jTables で同様の問題が発生したときのトリックでした。

ただし、「-Dsun.java2d.d3d=false」を指定しても満足できませんでした。

于 2014-11-06T22:13:14.187 に答える