gui线程

package thread;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class Thread1 extends JFrame implements Runnable ,ActionListener {

    private JPanel contentPane;
    private JTextField text;
    private JLabel ah = new JLabel("a");
    private Thread giveLetter=new Thread(this);
    private int score=0;
    private     JLabel defen = new JLabel("\u5F97\u52060");
    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    Thread1 frame = new Thread1();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public Thread1() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 670, 129);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        contentPane.setLayout(new BorderLayout(0, 0));
        setContentPane(contentPane);

        JPanel panel = new JPanel();
        contentPane.add(panel, BorderLayout.CENTER);

        JLabel label = new JLabel("\u663E\u793A\u5B57\u6BCD");
        panel.add(label);

        panel.add(ah);

        JLabel label_1 = new JLabel("\u8F93\u5165\u663E\u793A\u7684\u5B57\u6BCD");
        panel.add(label_1);

        text = new JTextField();
        panel.add(text);
        text.setColumns(10);

        panel.add(defen);

        text.addActionListener(this);
        giveLetter.start();
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO 自动生成的方法存根
        String letter=ah.getText().trim();
        String daan=text.getText();
        if(letter.equals(daan)){
            score++;
            defen.setText("score"+score);
            text.setText(null);
            validate();
            giveLetter.interrupt();
        }
        text.setText(null);
    }

    @Override
    public void run() {
        // TODO 自动生成的方法存根
        char c=‘a‘;
        for(;;){
            ah.setText(""+c+" ");
            validate();
            c=(char)(c+1);
            if(c>‘z‘)
                c=‘a‘;
            System.out.println(c);
            try{
                Thread.sleep(2000);
            }
            catch(Exception e){
                System.out.println(e.getMessage());
            }
        }

    }

}

时间: 2024-10-25 00:05:41

gui线程的相关文章

在非gui线程使用QMessageBox

最近我写项目的时候遇到一个奇怪的需求,要在工作线程内,根据某个情况弹出一个MessageBox 但是Qt提供的MessageBox只可以在gui线程(主线程)使用,于是我就对QMessageBox封装了一下,让其可以在非gui线程内被调用 特新介绍 1.可以在任何线程调用 2.show后和默认的MessageBox一样是阻塞的,MessageBox关闭后才会返回 注意: 1.我只封装了information,如果需要其他的,请做扩展 上源码 申明: [cpp] view plaincopy #i

关于GUI线程和worker线程

1.   所谓的worker线程,是指完全不牵扯到图形用户界面(GUI),纯粹做运算的线程. 2.   微软的多线程模型: Win32说明文件一再强调线程分为GUI线程和worker线程两种.GUI线程负责建造窗口以及处理主消息循环.Worker负责执行纯粹的运算工 作,如重新计算或重新编页等,这些运算工作会导致主线程的消息队列失去反应.一般而言,GUI线程绝不会去做那些不能够马上完成的工作. GUI线程的定义是:拥有消息队列的线程.任何一个特定窗口的消息总是被产生这一窗口的线程抓到并处理.所有

Java之线程———GUI线程

当java程序包含图形用户界面(GUI)时,Java虚拟机在运行应用程序时会自动启动更多的线程,其中有两个重要的线程:AWT-EventQuecue 和 AWT-Windows. AWT-EventQuecue 线程负责处理GUI事件,AWT-EventQuecue线程负责将窗体或组件绘制到桌面.JVM保证各个线程都有使用CPU资源的机会. 样列: 1 package tes; 2 3 import java.awt.Color; 4 import java.awt.FlowLayout; 5

Qt多线程编程总结(一)(所有GUI对象都是线程不安全的)

Qt对线程提供了支持,基本形式有独立于平台的线程类.线程安全方式的事件传递和一个全局Qt库互斥量允许你可以从不同的线程调用Qt方法. 这个文档是提供给那些对多线程编程有丰富的知识和经验的听众的.推荐阅读: Threads Primer: A Guide to Multithreaded Programming Thread Time: The Multithreaded Programming Guide Pthreads Programming: A POSIX Standard for Be

QT中的线程与事件循环理解(2)

1. Qt多线程与Qobject的关系 每一个 Qt 应用程序至少有一个事件循环,就是调用了QCoreApplication::exec()的那个事件循环.不过,QThread也可以开启事件循环.只不过这是一个受限于线程内部的事件循环.因此我们将处于调用main()函数的那个线程,并且由QCoreApplication::exec()创建开启的那个事件循环成为主事件循环,或者直接叫主循环.注意,QCoreApplication::exec()只能在调用main()函数的线程调用.主循环所在的线程

《CLR via C#》之线程处理——任务调度器

<CLR via C#>之线程基础--任务调度器 <CLR via C#>之线程基础--任务调度器线程池任务调度器设置线程池限制如何管理工作者线程同步上下文任务调度器自定义TaskScheduler派生类 FCL提供了两个派生子TaskScheduler的类型:线程池任务调度器(thread pool task scheduler),和同步上下文任务调度器(synchronization context task scheduler).默认情况下都使用线程池任务调度器. 线程池任务

QT核心编程之Qt线程 (c)

QT核心编程之Qt线程是本节要介绍的内容,QT核心编程我们要分几个部分来介绍,想参考更多内容,请看末尾的编辑推荐进行详细阅读,先来看本篇内容. Qt对线程提供了支持,它引入了一些基本与平台无关的线程类.线程安全传递事件的方式和全局Qt库互斥量允许你从不同的线程调用Qt的方法.Qt中与线程应用相关的类如表6所示. 表6 Qt中与线程相关的类 使用线程需要Qt提供相应的线程库的支持,因此,在编译安装Qt时,需要加上线程支持选项. 当在Windows操作系统上编译Qt时,线程支持是在一些编译器上的一个

Qt学习 之 多线程程序设计(QT通过三种形式提供了对线程的支持)

QT通过三种形式提供了对线程的支持.它们分别是, 一.平台无关的线程类 二.线程安全的事件投递 三.跨线程的信号-槽连接. 这使得开发轻巧的多线程Qt程序更为容易,并能充分利用多处理器机器的优势.多线程编程也是一个有用的模式,它用于解决执行较长时间的操作而不至于用户界面失去响应.在Qt的早期版本中,在构建库时有不选择线程支持的选项,从4.0开始,线程总是有效的. 线程类 Qt 包含下面一些线程相关的类: QThread 提供了开始一个新线程的方法 QThreadStorage 提供逐线程数据存储

Qt 学习之路 2(75):线程总结

前面我们已经详细介绍过有关线程的一些值得注意的事项.现在我们开始对线程做一些总结. 有关线程,你可以做的是: 在QThread子类添加信号.这是绝对安全的,并且也是正确的(前面我们已经详细介绍过,发送者的线程依附性没有关系) 不应该做的是: 调用moveToThread(this)函数 指定连接类型:这通常意味着你正在做错误的事情,比如将QThread控制接口与业务逻辑混杂在了一起(而这应该放在该线程的一个独立对象中) 在QThread子类添加槽函数:这意味着它们将在错误的线程被调用,也就是QT