как закрыть кадр Java с потоками

У меня есть кадр Java, что я хочу закрыть его автоматически после 3 или 4 секунд. Я узнал, что я должен используемые потоки. но я не знаю, как точно сделать это, это кряжистая часть моего кода:

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();
                }                
            }
        }
    }
}
8
задан Peter Lang 16 February 2010 в 19:50
поделиться

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();
3
ответ дан 5 December 2019 в 15:23
поделиться

Хотя AWT должен быть потокобезопасным, на самом деле это не так. Поэтому я предлагаю, как и Swing, выполнять все манипуляции с графическим интерфейсом в потоке диспетчеризации событий AWT (EDT).

Для этой конкретной задачи javax.swing.Timer должен помочь. (Хотя он находится в пакете javax.swing , в нем нет ничего специфичного для Swing.)

Также я настоятельно рекомендую не расширять классы, если в этом нет необходимости. Очень мало причин когда-либо расширять Thread или Frame (к сожалению, есть много плохих примеров и старых руководств).

6
ответ дан 5 December 2019 в 15:23
поделиться

Вы можете использовать Таймер и позволить ему позаботиться о потоках за вас.

2
ответ дан 5 December 2019 в 15:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: