[英]how to close a java frame with threads
我有一个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();
}
}
}
}
}
虽然AWT应该是线程安全的,但事实并非如此。 所以我建议像Swing一样,在AWT事件调度线程(EDT)上进行所有GUI操作。
对于这个特殊的任务, javax.swing.Timer
应该可以解决这个问题。 (虽然它位于javax.swing
包中,但没有任何特定于Swing的内容。)
除非你真的需要,否则我强烈建议不要扩展课程。 没有什么理由可以扩展Thread
或Frame
(不幸的是,有很多不好的例子和旧的教程)。
在你的框架中启动一个新的线程,然后传递给你的框架实例,并在一段特定的时间后关闭它。
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();
您可以使用计时器让它为您处理线程。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.