java - 如何关闭带有线程的java框架

标签 java multithreading awt frame

我有一个 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 特定的内容。)

此外,我强烈建议不要扩展类,除非你真的必须这样做。几乎没有理由扩展 ThreadFrame(不幸的是,那里有很多不好的例子和旧教程)。

关于java - 如何关闭带有线程的java框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2275819/

相关文章:

java - 从类路径资源(XML 文件)获取输入流

c - `asprintf` 是线程安全的吗?

java - Akka future 指导

java - 如何使用 2 个 JPanel 对象对齐 JButton 以形成基本的 java GUI

java - 注册-Spring Boot-MongoDb-主键替换新数据

java - 将字符串从数据库传递给 drawString()

java - 使用 Processbuilder 从 Java Web 应用程序调用 Python 脚本

java - Thread.currentThread().interrupt() 与 Runnable#run() 中的 this.interrupt()

java - KeyListener 在 Java 中不起作用

javascript - 如何在javascript中画一条线?什么是 Swing/Awt?我需要下载它们吗?