研究帖30

 

 

 

 


作者へのメッセージ
研究課題 これはBugじゃないか!

研究課題 これはBugじゃないか!

 

   

 

そよ風さん「博士!ちょっと来て下さい!」

ナイス博士「なんだ、何かあったのかい?」

そよ風さん「困った事が起きたんです。」

ナイス博士「何だい?」

そよ風さん「ちょっとこれを見て下さい。」

 

import java.awt.*;
import javax.swing.*;

public class BugTest{
    public static void main(String[] args){

        JFrame fr=new JFrame();
        fr.setDefaultCloseOperation(fr.EXIT_ON_CLOSE);
        fr.setVisible(true);
        fr.setExtendedState(fr.MAXIMIZED_BOTH);
        JOptionPane.showMessageDialog(fr, "test");
        //JOptionPane.showMessageDialog(null, "test");
        /*
         * nullだとフレームが閉じなくなる。
         */
    }
}

     

 

ナイス博士「これは、いつも使っているJFrameとJOptionPaneじゃないか。」

そよ風さん「そうなんですけど、JOptionPane.showMessageDialogは、いつも親コンポーネントを nullで使ってますよね?」

ナイス博士「うん、その方が簡単だからな。引数で親コンポーネントを指定するには、その 参照変数をJOptionPaneを作るクラスにも渡さないといけないしね。」

そよ風さん「ええ、で、nullの方のコンストラクタでこれを動かすとですね。...クリック!

ナイス博士「うん。」

そよ風さん「ほら、ダイアログがでましたね。」

ナイス博士「うん。で?」

そよ風さん「で、ダイアログを出したままタスクバーでデスクトップを出します。...クリック!

ナイス博士「うん。出たな。で?」

そよ風さん「で、もう一回JFrameをタスクバーのアイコンで出します。ほら!...

ナイス博士「あれっ、ダイアログがなくなったぞ!....」

そよ風さん「ええ、そうなんです。じゃ、JFrameを閉じて下さい。」

ナイス博士「うん。クリック!..pin!あれっ!クリック!..pin!あれっ!」

そよ風さん「閉じないでしょう?」

ナイス博士「とっ、閉じないぞ!」

そよ風さん「JOptionPaneがモーダルなままで消えてしまったんです。」

ナイス博士「どっ、どうするんだ!!」

そよ風さん「大丈夫です。タスクマネージャーを使って....ほら、閉じました。」

ナイス博士「閉じたか、..ふうっ..脅かさないでくれよ!」

 

 

 

BB君「おや、どうしたんですか?」

ナイス博士「ああ、BB君か。こういう訳なんだ。」

BB君「ほう、そうですか。」

そよ風さん「これって、javaのバグじゃないかしら。」

BB君「そうかなあ。...」

そよ風さん「だって、API仕様書に書いてある通りの使い方で起こってるのよ。」

BB君「そうか、じゃあ、やっぱりバグかな。」

そよ風さん「どうしたら良いかしら。」

BB君「別に、親コンポーネントを指定すればいいんだろう?」

ナイス博士「でも、今までずいぶんnullで使ったから、全部直すのは大変だぞ!」

そよ風さん「それに、本当にバグかどうか確認するべきね。」

BB君「そうだな。」

ナイス博士「今までどれくらい、この方法を使ったかなあ。」

そよ風さん「そうですねえ、最初にswingを使ったのがタグライターエブリワンだから、それ以降 ですね。」

 

     

 

ナイス博士「おいっ、やっぱりバグだったぞ!」

BB君「えっ、わかったんですか?」

ナイス博士「うん、何時も見ているサイトで教えてもらったんだ。」

そよ風さん「で、どうすれば良いんですか?」

ナイス博士「javaを1.6に切り替えれば良い様だぞ!」

BB君「ああ、そうですか。...でも..」

ナイス博士「うん、..1.5で慣れているしなあ。」

そよ風さん「どうします?」

ナイス博士「実は、別な事も考えたんだ。」

BB君「どうするんですか?」

ナイス博士「JOptionPaneを作る時、フォーカスがあるフレームを変数に入れられれば良いんだ。」

BB君「まあ、それでも良いでしょうけどね。」

 

     

 

そよ風さん「とりあえず、今まで作ったソフトを直しましょう。」

ナイス博士、BB君「うん、そうしよう。」

続く。

 

」」」」」」」」」」」」」」」」」」」」」」」」」」」」」」」」」」」」」」」」」」」

 

 

【バグの内容】

上に書いたバグの説明が、載っているサイトがあります。

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6300062

英語なので良く分らないのですが、要するに、

JOptionPane.showMessageDialog(null, "test"); を実行すると、隠された共有の親フレーム上にモーダルなダイアログが作成されるので、それが消えるまで 他のフレームにアクセス出来なくなるが、それはAWTの動きと違うし、使いにくいので、改修すべきだ、

と言うような事が書いてあるようです。

【修正した所】

アイコンミラー、アイコンミラービック、ランダムジグソー、ランダムジグソーディフィカルトなどで

これらの問題が起きたので、修正しました。

(ナイスプログラム)

作者へのメッセージ

 

研究課題に戻る。

 見学者への注意事項に戻る。