用JAVA实现线程等待提示框[1]

用JAVA实现线程等待提示框[1],第1张

    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线程结束后 关闭 线程正在运行 提示框

lishixinzhi/Article/program/Java/gj/201311/27675

JAVAd窗,有下面常见的2种方法实现:

通过JDialog(模式窗口) 类来实现.里面的写法类似JFrame

重点方法提示: setModal(true)

//当设置为true表示,如果不关闭这个d窗,那么主界面的其他组件都无法 *** 作,该d窗置于其他窗口的前面

//当设置为false表示,可以绕开本d窗,对主界面的其他组件进行 *** 作

优点: 功能强大,  扩展性强

缺点: 代码量大.

示例图

通过JOptionPane(提示框) 来实现

效果图如下

优点: 代码量少,简单,方便, 普通场景已经够用

缺点: 扩展性不够, 复杂逻辑难以实现.

下面写一个具体案例

场景:当用于对文本域的文字,进行 *** 作后,那么退出时,提示用户, 是否要保存已经更改后的内容.  如果用户没有修改内容,那么不用提示

重点代码

addDocumentListener-->用于实现对文本内容发生改变时进行响应

addWindowListener--->用于实现对窗口进行 *** 作时进行响应

完整代码如下

import java.awt.Font

import java.awt.event.*

import javax.swing.*

import javax.swing.event.*

public class JDDemo extends JFrame implements DocumentListener,WindowListener{

JTextArea jta

boolean flag

public JDDemo() {

jta = new JTextArea()//文本域

jta.setText("床前明月光")//文本域的文字-->可以通过IO加载txt文档的文字

jta.setFont(new Font("宋体",Font.BOLD, 20))//文本域的字体

jta.setLineWrap(true)//设置自动换行

jta.getDocument().addDocumentListener(this)//添加文档变化事件的响应.比如修改,删除等

JScrollPane jsp = new JScrollPane(jta)//滚动面板(当文字太多时,显示滚动条)

add(jsp)

setTitle("主窗口")//标题

setSize(300, 260)//大小

setLocationRelativeTo(null)//居中

setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE)//点击窗口的关闭按钮时,执行windowClosing的代码

addWindowListener(this)

setVisible(true)//窗口可见

}

public static void main(String[] args) {

new JDDemo()

}

//实现WindowListener接口,需要重写下面的6个方法, windowClosing专门处理关闭时的方法

public void windowOpened(WindowEvent e) {

}

public void windowClosing(WindowEvent e) {

if(flag){

int n = JOptionPane.showConfirmDialog(null, "已经更改了内容,需要保存后再退出吗?", "提示",JOptionPane.YES_NO_OPTION)

//n等于-1表示关闭了d出的对话框等情况的默认值

//n等于0(JOptionPane.YES_OPTION)表示选择了Yes

//n等于1(JOptionPane.NO_OPTION)表示选择了No

if(n==JOptionPane.YES_OPTION){

//把文字保存到文件的代码省略...

System.out.println("正在使用IO进行保存..ing")

closeFrame()//关闭窗口并退出

}else if(n==JOptionPane.NO_OPTION){

System.out.println("放弃保存修改.马上退出")

closeFrame()

}

}else{

closeFrame()

}

}

public void windowClosed(WindowEvent e) {

}

public void windowIconified(WindowEvent e) {

}

public void windowDeiconified(WindowEvent e) {

}

public void windowActivated(WindowEvent e) {

}

public void windowDeactivated(WindowEvent e) {

}

//文档事件,有下面三个,如果触发其中一个,都可以认为修改了文档,所以需要在退出时进行提示,是否保存

public void insertUpdate(DocumentEvent e) {//插入

flag=true

}

public void removeUpdate(DocumentEvent e) {//删除

flag=true

}

public void changedUpdate(DocumentEvent e) {//改变

flag=true

}

//关闭窗口的方法

public void closeFrame(){

this.setVisible(false)//窗口不可见

this.dispose()//窗口销毁

System.exit(0)//JVM虚拟机退出

}

}

运行效果图:


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11878176.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存