`
yedaya
  • 浏览: 21198 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Swing 多线程 解决界面blocking

阅读更多

不要阻塞GUI
通常我们在教程中看到添加一个按钮事件:
①:
button.addActionListener(new ActionListener(){
 public void actionPerformed(ActionEvent e){
  
  //处理代码...
  
 }
});

原来我也看过一些处理阻塞的方法:
②:
SwingUtilities.invokelater(new Runnable(){
 public void run(){
  //处理代码...
 }
});
然后将上面的代码添加到①的位置。可能是我理解错了,这个方法感觉
和原来没有太大的差异。

2012-5-2编辑

后来学习多线程知道里invokeLater方法只是把run方法的代码放在事件分发线程中,者应同样会阻塞画面,正确的做法是再run方法中将耗时的逻辑新开一个线程处理,即方法③。

2012-5-2编辑完毕

下面是我从Swing hecks 这本书上学到的方法:
③:
Thread buttonThread; //全局变量。

//添加事件监听
button.addActionListener(new MyAction());

//编写内部类
class MyAction extends AbstractAction implements Runnable{
 ActionEvent ev;
 public void run(){
  //事件处理代码
  //...

  buttonThread = null; //运行结束,释放资源

 }
 public void actionPerformed(ActionEvent e){
  ev = e; //传入事件

  //激活线程
  if(null != buttonThread){
   return;
  }else{
   buttonThread = new Thread(this);
   buttonThread.start();//开启线程
  }
 }
}

个人感觉③方法效果显著。记录下来,备忘。

分享到:
评论

相关推荐

    swing,线程和网络编程教学示例

    5. **并发工具类:** java.util.concurrent包提供如Semaphore(信号量)、CyclicBarrier(回环栅栏)和CountDownLatch(计数下锁)等工具,帮助处理多线程问题。 **网络编程:** Java提供了丰富的API进行网络编程...

    一键登录,实现群聊、私聊功能的java聊天室

    【标题】"一键登录,实现群聊、私聊功能的java聊天室"涉及的主要知识点包括Java编程语言、网络通信机制BIO(Blocking I/O)、图形用户界面GUI以及多线程编程。下面将对这些关键点进行详细介绍。 1. **Java编程语言*...

    局域网内部共享屏幕软件

    4. **多线程处理**:为了保证用户界面的响应性和屏幕共享的并行处理,多线程编程是必要的。Java的线程模型允许开发者创建和管理多个并发执行的任务,例如一个线程用于捕获和编码屏幕,另一个线程负责网络传输。 5. ...

    JavaNetworkingAndAwtBible-英文原版.zip

    3. **多线程与并发**:在网络编程中,多线程处理是常见的需求,比如一个服务器可能需要同时处理多个客户端的连接请求。Java的Thread类和Runnable接口提供了实现多线程的机制。 4. **高级网络API**:Java NIO(Non-...

    java qq程序源码

    Java QQ程序源码是一个基于Java语言开发的简易即时通讯应用,它主要展示了如何利用Java NIO(非阻塞I/O)技术和多线程技术来构建一个类似QQ的通信系统。这个项目对于学习和巩固Java基础知识,尤其是网络编程和并发...

    基于java的简单即时通讯工具系统毕业设计与实现(源代码+项目报告).zip

    总结,这个基于Java的简单即时通讯工具系统毕业设计项目,涵盖了Java编程、网络通信、多线程、用户界面设计、数据存储、安全策略等多个重要领域,是学习和实践Java技术的好案例。通过该项目,开发者不仅能提升编程...

    一款简单的智能聊天系统

    3. **NIO(Non-blocking I/O)**:Netty内部大量使用了NIO,这是一种I/O模型,它允许一个线程处理多个连接,提高了系统在高并发场景下的效率。 综合以上信息,这款智能聊天系统利用Java Swing构建用户界面,通过...

    基于Java的视频会议系统(程序+论文)

    5. **用户界面**:Java Swing和JavaFX可以用来创建用户友好的图形界面,使用户能够轻松地加入会议、启动摄像头、麦克风,以及进行其他操作。 6. **服务器端技术**:Java EE中的Servlet和JSP可以用于处理客户端请求...

    JavaEE6.0-API_CN

    API文档详细列出了这些特性的具体实现和用法,涵盖了诸如集合框架、网络编程、多线程、数据库连接(JDBC)、输入/输出(I/O)、反射、异常处理、国际化、安全、XML处理等多个领域。 在Java集合框架方面,JavaSE6.0...

    基于java的简单即时通讯工具项目设计与实现(源代码+项目报告).zip

    3. **多线程**:为了处理多个并发连接,服务器端通常会使用多线程。每个客户端连接对应一个独立的处理线程,保证了服务的响应速度。 4. **消息协议**:项目可能定义了一套简单的消息协议,用于封装和解析数据,如...

    Java Networking and AWT Bible

    2. **套接字(Sockets)与多线程**:在Java中,网络通信通常涉及多线程,因为服务器通常需要同时处理多个客户端请求。Java的Thread类和Runnable接口为实现并发提供了基础,而Socket和ServerSocket操作则在这些线程中...

    jdk1.6中文api

    JDK 1.6中的基础类库涵盖了I/O流、集合框架、多线程、网络编程等多个方面。例如,`java.io`包提供了用于读写文件、处理输入输出流的类;`java.util`包中的集合类如ArrayList、HashMap等,是日常编程的基础;`java....

    JAVA+JDK实例开发宝典

    Java标准库提供了大量的类和接口,覆盖了I/O、网络编程、集合框架、多线程、异常处理等多个领域。书中会通过实例展示如何使用这些类库,例如,使用InputStream和OutputStream进行文件操作,或者使用Socket进行网络...

    java即时通迅软件源码

    综上所述,开发一个Java即时通讯软件涉及到诸多方面,包括用户管理、实时通信协议、多线程技术、数据安全以及用户体验等。理解并掌握这些技术,能够帮助开发者构建出稳定、高效的即时通讯解决方案。

    Java毕业设计-基于Java的远程视频会议系统(系统+论文).rar

    - **多线程**:Java的多线程能力是构建视频会议系统的基础,用于处理并发用户请求和实时视频流传输。 - **Socket编程**:Java的Socket类提供了网络通信的基本接口,用于建立客户端与服务器之间的连接,实现数据的...

    基于Java的即时通信软件

    4. **多线程技术**:在即时通信软件中,通常需要同时处理接收和发送消息、用户登录、在线状态更新等多个任务,这就需要多线程技术来保证各个任务的并发执行。 5. **消息协议**:为了实现不同设备间的通信,需要定义...

    WuziGame-JAVA BIO的联机五子棋游戏(客户端+服务器)

    客户端界面由Swing库构建,Swing是Java提供的一种轻量级的GUI框架,可以方便地创建丰富的图形用户界面,包括按钮、文本框、面板等组件,用于显示棋盘、处理用户交互。 Swing中的JFrame作为主窗口,可以添加各种组件...

    JavaSe笔记2021-8-2

    JavaSE还包含了大量的标准库,如JDBC(Java Database Connectivity)用于数据库操作,Swing或JavaFX用于构建图形用户界面,以及XML处理API等。这些库为开发者提供了丰富的功能,简化了开发过程。 最后,笔记可能...

    java开发的局域网内部聊天工具

    - 在聊天工具中,多线程技术至关重要,它使得程序可以同时处理多个任务,如接收新消息、发送消息以及用户交互。 - Java中的Thread类和Runnable接口是实现多线程的基础,通过创建并启动线程,可以实现并发执行。 4...

    java2的相关学习资料

    Java2,也被称为Java 2 Platform Standard Edition (J2SE),是Java...通过学习和实践,你可以掌握Java2中的多线程、集合框架、NIO、异常处理、反射、枚举、Swing GUI以及JVM的工作原理,从而成为一名熟练的Java开发者。

Global site tag (gtag.js) - Google Analytics