jf は、200 ミリ秒ごとにピクセルを移動しようとしている JFrame です。このメソッドを作成したので、続行する前にソフトウェアを 200 ミリ秒一時停止します。millis と millisn は static long です。
public static void waitsec() {
millis =System.currentTimeMillis();
millisn =System.currentTimeMillis();
while (millisn<(millis+200)){
millisn=System.currentTimeMillis();
}
}
次の部分は、ボタンが押されたときに JPanel (jp) をゆっくりと 50 ピクセル移動させようとしている部分です。
public void actionPerformed(ActionEvent h){
if (h.getSource() == button){
for (int i = 0; i <50; ++i){
waitsec();
out.println ("" + i);//I'm checkinf if the waitsec() is working OK
x +=1;
jp.setLocation(x, 0);
totalGUI.repaint();
jp.setVisible(true);//setting visible so I could focus on it
jp.requestFocusInWindow (); //suspicious part
jp.requestFocus ();
}}
}
このプログラムを実行した結果: 数字が表示されなくなると、JPanel は完全には動きません (プログラムの実行が終了します)。ウィンドウを最小化および最大化しようとすると、プログラムがまったくフォーカスされていないかのように、プログラムの実行が完了するまで表示されません...可視に設定してフォーカスしたのに、フォーカスしないのはなぜですか?