こんにちわ。業務で行き詰ってしまい、アドバイスをいただきたく質問させていただきます。
稚拙な文章ですがご容赦くださいますようお願いいたします。
★プログラム構造
アプリケーションのメイン画面にテキストフィールドが配置されていて、
そのフィールドが空白の状態でエンターキーを押下するとポップアップでエラーを表示する。
エラーの表示は、JOptionPaneを継承したクラス内で、JDialogで表示している。
ただし、JDialogのタイトルバー上で右クリックをするとメニューバーが表示されてしまう。
この現象に対して、タイトルバーの部分をペイントすることにより、右クリックを防止しました。
ポップアップは移動できるため、マルチスレッド処理にし常にリペイントがかかるように製造。
★不具合
ところが運用にて、1ヶ月程度たつとメイン画面の動作が非常に遅いとのクレームが来たので
CPU使用率を調べてみたところ80%~90%ぐらいまで上昇していた。
画面上のオペレーションは、何もしてないのに80~90%から減少することはありませんでした。
メモリの使用率は大して使用しておりませんでした。
また発生するマシンはCPUが低スペックのもので発生しています。
メイン画面を再起動(JMの再起動)をすると現象が解消されるため、本アプリが原因と断定しました。
ところが、何が原因なのかがわかりません。
スレッド辺りが怪しいなぁとは思っておりますが。。
調査の切り口や、現象解消方法をご存知の方がいらっしゃいましたらご教授願いたく思います。
以下は環境です。
◎OS:UNIX(Solaris8)
◎JAVA:1.4.1_03
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
あとは、
「プロファイラ」使って
「CPUを消費している箇所」を探るしかない気がします・・・
この回答への補足
Swingのシングルスレッドルールに違反していることが判明しました。
(遅すぎますね・・・・。気づくのに。)
おそらくその影響かと思います。
とりあえずこの質問は締め切らせていただきます。
回答していただいた皆さんありがとうございました。
回答ありがとうございます。
プロファイラも
JavaBean、Eclipse両方試しましたが、特に問題点は見つかりませんでした。
No.3
- 回答日時:
切り口が変わってしまうのですが、
タイトルバーを出さないという制御方法です。
別クラスになりますが、
JFrameで
setUndecorated(true);
とすれば、タイトルバーがでません。
もしくは、親のJWindowクラスは元々タイトルバーがありません。
以前、タイトルを出したくないとお客さんから依頼を受けて、JWindowに変更しました。
JDialogに合わせるコーディングは必要ですが、スレッドは考える必要がなくなると思います。
ありがとうございます。
namida6000さんの教えていただいた方法は、似たような案を
代変案として提出済みです。
私が製造するのであれば、namida6000さんと同じような製造方法にするのですが、製造したのは、私ではないので・・・・。
ご意見ありがとうございます。
No.2
- 回答日時:
> マルチスレッド処理にし常にリペイントがかかるように製造。
どう見てもこの部分が原因に思えるのですが。
要するにエラーダイアログの所在を常に監視し、タイトルバーの部分を上で塗りつぶしていると。
それをマルチスレッドで無限ループさせているわけですね。
無限ループは何もしなくても非常にCPUパワーを消費します。
この部分の設計を考え直す必要があるでしょう。
# そもそも右クリックメニュー表示を禁止する必要があるのか?
回答ありがとうございます。
>要するにエラーダイアログの所在を常に監視し、タイトルバーの部分を上で塗りつぶしていると。
>それをマルチスレッドで無限ループさせているわけですね。
おっしゃるとおりです。
>無限ループは何もしなくても非常にCPUパワーを消費します。
勉強になります。
ただ、スレッドが停止・開放された場合はCPUの使用率が下がると思っておりますが、間違っていますでしょうか。
現状では、CPU使用率が減少しないのです。
>この部分の設計を考え直す必要があるでしょう。
すでに代変案は提出済みなのですが、原因究明を要請されていますので、調べている最中でございます。
># そもそも右クリックメニュー表示を禁止する必要があるのか?
客先からの要望なのです。。
No.1
- 回答日時:
スレッドがどんどん増えて、溜まっていってるのでは?
きちんと開放されてるでしょうか?
こちらが参考になるかと思いますが・・・。
参考URL:http://www.techscore.com/tech/J2SE/Thread/4-4.html
この回答への補足
すみません。もうひとつ気になってることがあります。
(1)からの処理は、staticなメソッド内で行っています。
そして、(2)のダイアログの表示に関しては、
dialog.show();
で、表示しています。
このメソッドは使用すべきではありません。との警告が表示されます。
これが関係ある可能性がありますか。
回答ありがとうございます。
参考URLも参照させていただきました。
しかし、参考URLに書いてある内容は行っておりました。
(1)スレッドをスタートさせてリペイントを繰り返す。
(2)ダイアログ(ペイントを行う元のダイアログ)を表示。
(3)OKボタンが押下され、制御が戻ってきたらスレッドを停止させる。
UNIXとWINDOWSでなにか相違点などあるのでしょうか。
現在デバックはWINDOWSで行っています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【JavaScriptわからない】1クリ...
-
遷移元を判定したい!
-
[VB6]画像切り取り
-
三菱GOTの画面切り替えについて
-
javaのstrutsを使った画面遷移...
-
Javaプログラミングの質問にな...
-
Strutsで画面開設時に・・・
-
Strutsの情報保持の仕方について
-
Beautiful Soupのインストール...
-
Strutsで画面遷移させない。
-
Strutsのデータ受け渡しについて
-
腕時計の時報をならないように...
-
ボタンが活性化の場合とは、ボ...
-
フォルダ改行
-
htaについて。親画面子画面を認...
-
このadidasの腕時計の時刻の設...
-
ハウスキープ処理について
-
漏電遮断器の黄色ボタンと白色...
-
クラスタ構成の際のアプリへの影響
-
HashMapで、valueにマッピング...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
三菱GOTの画面切り替えについて
-
C言語で今まで表示していた画面...
-
ASP.NET 画面遷移前の状態を保...
-
遷移元を判定したい!
-
Strutsの情報保持の仕方について
-
C# ログイン画面からメイン画面...
-
画面を隠す・消す方法を教えて...
-
Java-jspの画面入力値保持について
-
Wi-Fiのパスワードが指定なしと...
-
Javaプログラミングの質問にな...
-
FormのsubmitでFormの内容がnull
-
登録後、呼び出し元ページに戻...
-
ServletからServletへの値渡し
-
アドレスバーに引数を表示させ...
-
セッション切れでのリクエスト...
-
javaのstrutsを使った画面遷移...
-
JAVAのセッション変数の上書き...
-
Javascriptのhistory.back()が...
-
strutsで、JSP→アクションクラ...
-
Sessionがnullになりません。
おすすめ情報