マルチスレッド | 江木町の牛舎

江木町の牛舎

~ 田舎者プログラマの日常 ~

仕事先のプログラムはネタに尽きません(悪い意味で)

今回はマルチスレッド関係のバグ

このプログラムが客先で2010年頃から稼働しているというのが驚き

「問題は発生していない」

っていうけど、発生した時点での画面更新されないはずなんだよなぁ

「以前から言われているけど分からんからほっといてる」

と言い切るとは...

金払っている客先が泣くわ(/_;)

まぁ、作った人はもういないらしいがな

すごいぞ○○○(会社名)


で、多分そうだろうなぁ、と思って調べていたのですが
考え方はVB.NETと一緒と思っていいんだろうか

あっちはメインスレッドだったっけかな? もう忘れたけど

こっちはイベント・ディスパッチ・スレッドっていうのね

VB.NETだとデリゲート作成してあーだこーだやらないとだめだったけど
こっちはもう少しわかりやすい?

とりあえず、メソッド内でガンガンにJTable更新しているのに
それを単純にスレッド作成して呼び出しているってのがすごいわ

Javaの仕様を知らないで、客先納品するプログラムを作成させるこの会社の方針がよくわかる

俺を含めてw


やりたい事はわかる

どうやら「今処理やってますよ」的なプログレスバー画面を表示しつつ
その裏でゴニョゴニョと画面更新して、処理が終わったら表示したいらしいのだが
プログレスバー画面の表示とJTableの画面更新を別スレッドで動作させたいらしい

調べてみたらプログレスバー画面は非モーダルなので別スレッドにしなくても動くのだがな
何を血迷っているのか分からん...


それとは別に、これはおいらの勉強不足で
正しい別スレッド起動によるJTable更新処理を実行すると
プログレスバー画面が表示されない(´・ω・`)なんでや


そんなこんなで修正方法が確定できず保留 あかんぞ どげんかせんと

とはいえ、プログレスバー表示画面をあっちこっちで使っているので
単純に作り替えられないのが困りもの

うーん... どう修正したら既存処理と同様の動きをしつつバグが修正できるのだろうか

多分、画面表示更新処理全体的に直さないとダメだと思うんだけど
本当にそこまでやらないとダメなのかがすぐわからないのが悔しい


とりあえず SwingUtilities.invokeLater で起動すればいいらしいのだが
自分がディスパッチスレッドだとうまくいかない?
そこは再度確認した方がいいかも
isEventDispatchThread() で確認はできるんだが


別の作業があるからそっち優先で 近いうちに何とかしよう