8

3 ~ 4 秒後に自動的に閉じたい Java フレームがあります。スレッドを使用する必要があることがわかりました。しかし、正確にそれを行う方法がわかりません。これは私のコードのダミー部分です:

package intro;

import java.awt.*;
import java.io.IOException;
//import view.LangMenu;

public class IntroClass extends Frame {

    private int _screenWidth = 0;
    private int _screenHeight = 0;
    private int _screenCenterx = 0;
    private int _screenCentery = 0;

    //private static final String SOUND_PATH="/sounds/introSound.midi";
    public IntroClass() {
        Toolkit thisScreen = Toolkit.getDefaultToolkit();
        Dimension thisScrrensize = thisScreen.getScreenSize();

        _screenWidth = thisScrrensize.width;
        _screenHeight = thisScrrensize.height;
        _screenCenterx = _screenWidth / 2;
        _screenCentery = _screenHeight / 2;
        setBackground(Color.pink);
        Label lbl = new Label("Welcome To Dots Game. Samaneh Khaleghi", Label.CENTER);
        add(lbl);
        setUndecorated(true);
        setLocation((_screenCenterx*50)/100,_screenCentery-(_screenCentery*50)/100);
        setSize((_screenWidth * 50) / 100, (_screenHeight * 50) / 100);

        WaitClass r = new WaitClass();
        r.start();
        view.DotsBoardFrame d=new view.DotsBoardFrame();
                main.Main.showScreen(d);
    }

    class WaitClass extends Thread {

        boolean running = true;

        public void run() {
            while (running) {
                try {
                    Thread.sleep(50);
                } catch (InterruptedException ex) {
                    ex.printStackTrace();
                }                
            }
        }
    }
}
4

3 に答える 3

6

AWT はスレッドセーフであると考えられていますが、実際にはそうではありません。したがって、Swing と同様に、すべての GUI 操作を AWT イベント ディスパッチ スレッド (EDT) で行うことをお勧めします。

この特定のタスクでjavax.swing.Timerは、トリックを行う必要があります。(javax.swingパッケージには含まれていますが、Swing 固有のものは何もありません。)

また、本当に必要でない限り、クラスを拡張しないことを強くお勧めします。Thread拡張または拡張する理由はほとんどありませんFrame(残念ながら、悪い例や古いチュートリアルがたくさんあります)。

于 2010-02-16T20:10:38.297 に答える
3

フレームで新しいスレッドを開始し、それにフレーム インスタンスを渡し、一定時間後にスレッドを閉じます。

class MyThread extends Thread {

  private JFrame frame;
  //-- getters and setters for frame

  public void run() {
    Thread.sleep(1000); //close the frame after 1 second.
    frame.close();
  }

}

JFrame クラスでは、コンストラクターに次のコード行を明示的に配置します。

MyThread th = new MyThread();
th.setFrame(this);
th.start();
于 2010-02-16T19:57:24.780 に答える
2

Timerを使用して、スレッドを処理させることができます。

于 2010-02-16T20:11:49.663 に答える