invokeLater和invokeAndWait
来源:互联网 发布:网络推广学什么 编辑:程序博客网 时间:2024/06/18 03:09
invokeLater和invokeAndWait的区别
invokeLater:在把可运行的对象放入队列后就返回,而invokeAndWait一直等待已启动了可运行的run方法才返回。如果一个操作在另外一个操作执行前必须从一个组件获得信息,则invokeAndWait方法很有用的。
public class SwingDemoInvokeAndWait { public static void main(String[] argv) throws InterruptedException, InvocationTargetException { SwingUtilities.invokeAndWait(new Runnable() { @Override public void run() { constructUI(); } }); final Runnable doHelloWorld = new Runnable() { public void run() { System.out.println("Hello World on " + Thread.currentThread()); } }; Thread appThread = new Thread() { public void run() { try { SwingUtilities.invokeAndWait(doHelloWorld); } catch (Exception e) { e.printStackTrace(); } System.out.println("Finished on " + Thread.currentThread()); } }; appThread.start(); } private static void constructUI() { JLabel bulletin = new JLabel("Hello,World!", JLabel.CENTER); JFrame frame = new JFrame("Bulletin"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().add(bulletin); frame.setSize(200, 150); frame.setVisible(true); bulletin.setForeground(Color.RED); } }
由于doHelloWorld是在invokeAndWait中被执行的,所以 一定会等待doHelloWorld方法的执行并返回,即”Hello World on”一定会在”Finished on”前显示出来。
import java.awt.Color; import java.lang.reflect.InvocationTargetException; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.SwingUtilities; public class SwingDemoInvokeLater { public static void main(String[] argv) throws InterruptedException, InvocationTargetException { final Runnable doHelloWorld = new Runnable() { public void run() { System.out.println("Hello World on " + Thread.currentThread()); } }; Thread appThread = new Thread() { public void run() { try { SwingUtilities.invokeLater(doHelloWorld); } catch (Exception e) { e.printStackTrace(); } System.out.println("Finished on " + Thread.currentThread()+",but this might well be displayed before the other message."); } }; appThread.start(); } private static void constructUI() { JLabel bulletin = new JLabel("Hello,World!", JLabel.CENTER); JFrame frame = new JFrame("Bulletin"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().add(bulletin); frame.setSize(200, 150); frame.setVisible(true); bulletin.setForeground(Color.RED); } }
由于doHelloWorld是在invokeLater中被执行的,因而“Finished on”有可能出现在其他信息的前面比如”Hello World On”。
参考文章:http://developer.51cto.com/art/201201/313034.htm
http://blog.csdn.net/legendmohenote/article/details/5853833
http://blog.csdn.net/yanwushu/article/details/39434159
0 0
- invokeLater和invokeAndWait
- invokeLater和invokeAndWait
- 【转】invokeLater和invokeAndWait
- invokeLater和invokeAndWait
- invokeLater和invokeAndWait
- SwingUtilities.invokeLater 和SwingUtilities.invokeAndWait
- SwingUtilities中invokeLater和invokeAndWait
- SwingUtilities的invokeLater和invokeAndWait
- SwingUtilities的invokeLater和invokeAndWait
- SwingUtilities的invokeLater和invokeAndWait
- SwingUtilities中invokeLater和invokeAndWait的介绍
- SwingUtilities中invokeLater和invokeAndWait介绍
- SwingUtilities中invokeLater和invokeAndWait介绍
- SwingUtilities.invokeLater()和SwingUtilities.invokeAndWait()汇总
- SwingUtilities中invokeLater和invokeAndWait的介绍
- SwingUtilities中invokeLater和invokeAndWait介绍
- SwingUtilities.invokeLater()和SwingUtilities.invokeAndWait()的区别
- SwingUtilities.invokeLater()和invokeAndWait()的使用
- html td标签 限制字符长度
- JavaScript 函数的不常用属性(name/callee/caller)
- C++—友元函数
- 在js的方法中使用$.ajax({url,data,type,dataType,success});
- 收藏一下技术资料
- invokeLater和invokeAndWait
- Nginx支持Socket转发过程详解
- hadoop、hbase、hive版本对应关系
- Spring Security 4 使用@PreAuthorize,@PostAuthorize, @Secured, EL实现方法安全
- Java MyBatis 插入数据库返回主键
- iOS 轮播图
- 2016级《程序设计基础(B)Ⅱ》实验6_动态规划
- 调用第三方开发word 文档
- Scrapy爬虫入门教程八 交互式 shell 方便调试