こんにちわ。業務で行き詰ってしまい、アドバイスをいただきたく質問させていただきます。
稚拙な文章ですがご容赦くださいますようお願いいたします。
★プログラム構造
アプリケーションのメイン画面にテキストフィールドが配置されていて、
そのフィールドが空白の状態でエンターキーを押下するとポップアップでエラーを表示する。
エラーの表示は、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で質問しましょう!
似たような質問が見つかりました
- au(KDDI) 特定の画面を見るとスマホが固まります ご覧頂き有難うございます。 特定のページを見るとスマホが固まり 1 2023/08/21 19:29
- ノートパソコン PCが異常に遅い 12 2023/04/05 14:01
- Windows 10 パソコンの起動時、画面が黒いままのトラブルにつきまして。 4 2022/10/02 18:02
- Windows Me・NT・2000 widows xpのエラーで利用ができなくなりました 3 2022/12/21 13:43
- JavaScript [Java] Edgeでのアドレスバー非表示について 3 2022/04/20 17:51
- Windows 10 再起動後 Pinが使用できず、PC(windows11)にサインインできない 3 2022/08/30 20:53
- ビデオカード・サウンドカード メイン機とは別に、初自作としてpcを組みました。 pcスペック cpu ryzen5 5500 グラ 1 2023/05/15 12:22
- その他(パソコン・周辺機器) Windowsマシン。USBタップの「自動切れ、再接続」がうざい。解決策は? 7 2023/01/25 08:27
- デスクトップパソコン PCの通電はするがモニタが黒い画面のまま何も表示はじまらない。 7 2023/01/10 09:36
- Windows 10 Windows11タスクバーやエクスプローラー、スタートメニュー 動画全画面時にカーソルが見えない 1 2022/04/08 00:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語で今まで表示していた画面...
-
三菱GOTの画面切り替えについて
-
system("cls")について
-
ブラウザアドレスバーからのURL...
-
画面を隠す・消す方法を教えて...
-
FormのsubmitでFormの内容がnull
-
プログラミングで例えばゲーム...
-
Java-jspの画面入力値保持について
-
サブミット後、自動的に画面を...
-
ServletからServletへの値渡し
-
[戻る]やhistory.backでの遷移...
-
登録後、呼び出し元ページに戻...
-
戻るボタン
-
検索画面→結果画面→検索画面と...
-
C# ログイン画面からメイン画面...
-
アドレスバーに引数を表示させ...
-
CPUの使用率が高くなる事象につ...
-
Strutsで画面遷移させない。
-
ブラウザ画面で、変更した値が...
-
strutsのactionタグinput
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
三菱GOTの画面切り替えについて
-
画面遷移を行わずに同一ページ...
-
プログラミングで例えばゲーム...
-
フロントエンドフレームワーク...
-
Java-jspの画面入力値保持について
-
遷移元を判定したい!
-
ASP.NET 画面遷移前の状態を保...
-
Googleキーワードについて キー...
-
Javaプログラミングの質問にな...
-
C言語で今まで表示していた画面...
-
ボタンを押したあとに画像を表...
-
セッション切れでのリクエスト...
-
C# ログイン画面からメイン画面...
-
JavaScriptでページが更新され...
-
ServletからServletへの値渡し
-
ZOOMでオンラインミーティング
-
登録後、呼び出し元ページに戻...
-
サブミット後、自動的に画面を...
-
アドレスバーに引数を表示させ...
-
Beautiful Soupのインストール...
おすすめ情報