- PR -

Java Swingの画面描画

1
投稿者投稿内容
tak
会議室デビュー日: 2004/07/13
投稿数: 4
投稿日時: 2004-07-13 10:47
こんにちわ。
Swingの描画について、聞きたいことがあります。

画面を何時間もそのままの状態で表示させて、ボタンなどで前の画面に戻ると画面全体がグレーになることがあります。
その場合は、タスクに最小化すれば正常な画面に戻ります。
プログラムでは、前画面のJFrameを保持し、ボタンが押されたらsetVisible(true)で
前画面に戻っています。

描画のタイミングなのでしょうか?
ご伝授ください。

開発環境
j2sdk1.4.1_02
クライアントPC:OS Windows Xp


びしばし
大ベテラン
会議室デビュー日: 2002/03/13
投稿数: 181
投稿日時: 2004-07-13 12:32
ここに書いちゃったら「伝授」じゃなくなっちゃいますが、よろしいですか ?

「Swingで前の画面に戻る」? ほか、これだけの情報では状況がよくわかりませんが、

引用:

描画のタイミングなのでしょうか?



そうかもしれませんね(そうでないかもしれませんけど)。

そのボタンのリスナーでの処理の後に、再描画スレッドがちゃんと動くようにしてみてください。
tak
会議室デビュー日: 2004/07/13
投稿数: 4
投稿日時: 2004-07-13 13:05
返信ありがとうございます。

簡単な説明でした。詳しくは以下の通りです。
メニュー画面 → 登録画面
何時間か登録画面を表示しておく。(4、5時間以上)
登録画面 → メニュー画面
メニュー画面の内容が表示されず、画面全体がグレーになる。(画面背景色)

ちなみに、時間をおかずに登録画面からメニュー画面に戻ったら正常にメニュー画面の内容は表示されます。
びしばし
大ベテラン
会議室デビュー日: 2002/03/13
投稿数: 181
投稿日時: 2004-07-13 14:35
要するに「しょっちゅう切り替えていると大丈夫なのに、しばらく放っておいてから切り替えると画面が崩れる」ということでしょうか ?

私の記憶では 1.4.0、1.4.1 の Swing はマウスのアクションイベントを取り逃したり、描画が重かったりとダメダメでしたので、(開発/利用 両方の)環境を 1.4.2 へ変更されると解決するかもしれません(しないかもしれません)。
参考: http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=889&forum=12

また、グラフィックドライバの不具合であることもありますので、そちらもチェックしてみてください。

実は私も、数時間起動しっぱなしの Swing アプリのレイアウトが崩れてしまう現象(そして勝手に直ることもある)に悩まされています。グレー一色と現象は違いますが、メモリか何かのリソースがリークしているかもしれません。
# 再現性とかよくわかっていないので Bug Parade に報告できていません。
tak
会議室デビュー日: 2004/07/13
投稿数: 4
投稿日時: 2004-07-21 16:49
お久しぶりです。

JFrame画面の不可視状態が長く続くと、可視にした時に画面全体がグレー一色になります。

開発環境を1.4.2に変更してみましたが、やっぱり同じ現象が起きます。
動作PCもNEC、DELLのどちらで検証しても起きます。
ちなみに、1.4.1_02の環境でOSがNTだと現象は起きませんでした。(丸1日表示)

LookAndFeelをOracleの概観で設定しているのですが、その影響もあるのでしょうか?

引き続き調査するしかないですね。
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2004-07-21 17:17
unibon です。こんにちわ。

引用:

takさんの書き込み (2004-07-21 16:49) より:
JFrame画面の不可視状態が長く続くと、可視にした時に画面全体がグレー一色になります。

開発環境を1.4.2に変更してみましたが、やっぱり同じ現象が起きます。
動作PCもNEC、DELLのどちらで検証しても起きます。
ちなみに、1.4.1_02の環境でOSがNTだと現象は起きませんでした。(丸1日表示)


Java アプリケーションの作りの問題と、Java の側の問題の2通りが考えられますが、後者の問題かどうかを調べるために、起動時のオプションに -Dsun.java2d.noddraw=true を指定してみてはどうでしょうか。noddraw をキーワードにして検索するといろいろとヒットします。
また、Java アプリケーションの作りの問題かどうかは、挙動の詳細やコードを見ないと断言できないのですが、「グレー一色」の状態で repaint させると回復するでしょうか。たとえば、一旦、そのアプリケーションのウィンドウを「最小化」してから「元のサイズに戻す」などして。
tak
会議室デビュー日: 2004/07/13
投稿数: 4
投稿日時: 2004-07-23 10:59
unibonさん、こんにちわ。

引用:

unibonさんの書き込み (2004-07-21 17:17) より:
unibon です。こんにちわ。

Java アプリケーションの作りの問題と、Java の側の問題の2通りが考えられますが、後者の問題かどうかを調べるために、起動時のオプションに -Dsun.java2d.noddraw=true を指定してみてはどうでしょうか。noddraw をキーワードにして検索するといろいろとヒットします。



起動オプションに-Dsun.java2d.noddraw=trueを追加して実行しました。
昨日から画面を表示させて、今日確認をしたところ正常に画面が可視されました。
これから数回テストして確認します。

返答してくださった方(びしばし、unibon)、ありがとうございます。
1

スキルアップ/キャリアアップ(JOB@IT)