我有一个 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
(不幸的是,那里有很多不好的例子和旧教程)。
关于java - 如何关闭带有线程的java框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2275819/