知识大全 用JAVA实现线程等待提示框
Posted 知
篇首语:只有上不去的天,没有过不去的山。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 用JAVA实现线程等待提示框相关的知识,希望对你有一定的参考价值。
用JAVA实现线程等待提示框 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Java语言从其诞生到现在不过短短五年时间 却已经成为全球最热门的语言 Java程序员正成为IT业其它程序员中薪金最高的职员 这一切都应归功于Java良好的特性 简单 面向对象 分布式 平台无关性 可移植性 支持多线程等等 本文将用Java的多线程特性来实现线程等待提示框
一 问题的提出
在Java应用程序编程中 有时需要在GUI(图形化用户界面)中处理一些占用系统资源较多 耗费时间较长的事务 例如 与数据库进行大批量数据交换 大数据量的复杂运算 远程连接服务器等等 系统在处理这些事务时 如果还是使用GUI所在的线程 会导致界面冻结 无法刷新 看起来好象系统已经崩溃 这是一个良好的软件系统不允许出现的局面
二 解决问题的途径
解决上述问题的方法就是采用Java的多线程特性 为这些耗时又耗资源的事务再开一个线程单独运行 并在GUI处出现提示框 正在执行 请等待 在线程结束时自动关闭该提示框 这样即避免了上面出现的界面冻结情况 又保证了线程的安全性 是软件开发者上佳的选择
三 具体实现
( )例子
这里举一个简单的例子来介绍如何用JAVA实现线程等待提示框
此例实现一个很简单的GUI 根窗体testFrame是一个JFrame(框架)类 在testFrame中放置一个JPanel(面板) testPanel 最后将一个JButton(按钮) testButton添加到testPanel中
按下testButton 系统开始运行一个模拟的耗时又耗资源的事务 在标准输出设备上显示从 到 同时出现 线程正在运行 提示框 一旦事务完成(即线程结束) 系统自动关闭该提示框
( )实现方法
为了达到上述功能 可以这样来实现
当按下按钮后 启动一个新的线程来完成事务 即在标准输出设备上显示从 到 (在代码中通过TestThread类来实现) 紧接着再启动一个线程来显示 线程正在运行 提示框(在代码中通过ThreadDiag类来实现)
为了使提示框在TestThread结束后 自行关闭 在TestThread启动后 还启动了一个DisposeDiag线程 这个线程专门用来等待TestThread线程结束后 关闭 线程正在运行 提示框
( )程序代码及注释
① TestFrame类
TestFrame是Java运行主程序 用来显示用户界面
import javax swing *; import java awt *; import java awt event *; public class TestFrame extends JFrame //GUI所需组件 public JPanel testPanel = null; public JButton testButton = null; public JFrame testFrame = null; public TestFrame() //设置GUI为windows风格 try UIManager setLookAndFeel( sun java swing plaf windows WindowsLookAndFeel ); catch (Exception ex) System out println( Exception: + ex); testFrame = this; // 初始化GUI Dimension dimensions = Toolkit getDefaultToolkit() getScreenSize(); setSize(dimensions width / dimensions height / ); setLocation(dimensions width/ dimensions width/ dimensions height/ dimensions height/ ); testPanel = new JPanel(); testButton = new JButton( 开始线程 ); testPanel add(testButton); getContentPane() add(testPanel); //增加按钮testButton事件监听器 testButton addActionListener(new java awt event ActionListener() public void actionPerformed(ActionEvent e) TestThread testThread = new TestThread();//新生成一个处理事务线程 testThread start();//启动事务线程 (new ThreadDiag(testFrame testThread 正在执行 请等待 )) start();//启动等待提示框线程 ); //增加testFrame事件监听器 addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System exit( ); ); public static void main(String[] args) //主程序 TestFrame testFrame = new TestFrame(); testFrame setTitle( 线程等待测试 ); testFrame show();
② TestThread类
TestThread类是处理事务线程 即在标准输出设备上显示从 到
public class TestThread extends Thread public void run() for (int i = ; i < ; i++ ) System out println(i);
③ ThreadDiag类
ThreadDiag类用来显示 线程正在运行 提示框
import java awt *; import javax swing *; public class ThreadDiag extends Thread private Thread currentThread = null;//实际调用时就是TestThread事务处理线程 private String messages = ;//提示框的提示信息 private JFrame parentFrame = null;//提示框的父窗体 private JDialog clueDiag = null;// 线程正在运行 提示框 private Dimension dimensions = Toolkit getDefaultToolkit() getScreenSize(); private int width = dimensions width / height = ; private int left = top = ; public ThreadDiag(JFrame parentFrame Thread currentThread String messages) this parentFrame = parentFrame; this currentThread = currentThread; this messages = messages; initDiag();//初始化提示框 protected void initDiag() clueDiag = new JDialog(parentFrame 正在执行 请等待 true); clueDiag setCursor(new Cursor(Cursor WAIT_CURSOR)); JPanel testPanel = new JPanel(); JLabel testLabel = new JLabel(messages); clueDiag getContentPane() add(testPanel); testPanel add(testLabel); (new DisposeDiag()) start();//启动关闭提示框线程 public void run() //显示提示框 int left = (dimensions width width)/ ; int top = (dimensions height height)/ ; clueDiag setSize(new Dimension(width height)); clueDiag setLocation(left top); clueDiag show();
④ DisposeDiag类
DisposeDiag类用来关闭提示框
class DisposeDiag extends Thread public void run() try currentThread join();//等待事务处理线程结束 catch(InterruptedException e) System out println( Exception: + e); clueDiag dispose();//关闭提示框
注 为了共用变量clueDiag 上述ThreadDiag类和DisposeDiag类放在同一个Java文件内 如果分开存放 只需传递一下参数即可
上述程序在jdk 下运行通过
( )程序运行结果
运行结果如下图所示
cha138/Article/program/Java/gj/201311/27781相关参考
用JAVA实现线程等待提示框[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &nb
用JAVA实现线程等待提示框[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &nb
用JAVA实现线程等待提示框[4] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &nb
Java程序中的多线程 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一为什么会排队等待? 下
右下角弹出提示框想必大家不会陌生吧本文简单的为大家实现一个具体代码如下有需求的朋友可以参考下 复制代码代码如下:cha138/Article/program/Java/JSP/20
用Java实现多线程服务器程序 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 摘要在Java出现
/** *authorannegu *date */ annegu做了一个简单的Http多线程的下载程序来讨论一下多线程并发下载以及断点续传的问题 这个程序的功能就是可以分多个线程从目标
用Java多线程实现无阻塞读取远程文件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 我是不怎么
/** *thisprogramTODO &nb
对于初学者来说下面这个例子是一个非常常见的错误 /** * 线程A循环次后等待并放弃锁让线程B执行 */ classThreadAextendsThread //线程同步的公共