温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Swing如何使用invokeLater()方法

发布时间:2021-07-14 16:17:18 来源:亿速云 阅读:188 作者:chen 栏目:编程语言

本篇内容主要讲解“Swing如何使用invokeLater()方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Swing如何使用invokeLater()方法”吧!

Swing使用invokeLater()方法

你可以从任何线程调用invokeLater()方法以请求事件派发线程运行特定代码。你必须把要运行的代码放到一个Runnable对象的run()方法中,并将此Runnable对象设为invokeLater()的参数。 invokeLater()方法会立即返回,不等待事件派发线程执行指定代码。这是一个使用invokeLater()方法的例子:

RunnabledoWorkRunnable=newRunnable(){  publicvoidrun(){doWork();}  };  SwingUtilities.invokeLater(doWorkRunnable);

Swing使用invokeAndWait()方法

invokeAndWait()方法和invokeLater()方法很相似,除了 invokeAndWait()方法会等事件派发线程执行了指定代码才返回。在可能的情况下,你应该尽量用invokeLater()来代替 invokeAndWait()。如果你真的要使用invokeAndWait(),请确保调用invokeAndWait()的线程不会在调用期间持有任何其他线程可能需要的锁。
这是一个使用invokeAndWait()的例子:

voidshowHelloThereDialog()  throwsException{  RunnableshowModalDialog=new Runnable(){  publicvoidrun(){  JOptionPane.showMessageDialog(  myMainFrame,"HelloThere");  }  };  SwingUtilities.invokeAndWait  (showModalDialog);  }


类似地,假设一个线程需要对GUI的状态进行存取,比如文本域的内容,它的代码可能类似这样:

voidprintTextField()throwsException{  finalString[]myStrings=  newString[2];   RunnablegetTextFieldText=  newRunnable(){  publicvoidrun(){  myStrings[0]=  textField0.getText();  myStrings[1]=  textField1.getText();  }  };  SwingUtilities.invokeAndWait  (getTextFieldText);   System.out.println(myStrings[0]  +""+myStrings[1]);  }

如果你能避免使用线程,***这样做。线程可能难于使用,并使得程序的debug更困难。一般来说,对于严格意义下的GUI工作,线程是不必要的,比如对组件属性的更新。
不管怎么说,有时候线程是必要的。下列情况是使用线程的一些典型情况:


◆执行一项费时的任务而不必将事件派发线程锁定。例子包括执行大量计算的情况,会导致大量类被装载的情况(如初始化),和为网络或磁盘I/O而阻塞的情况。
◆重复地执行一项操作,通常在两次操作间间隔一个预定的时间周期。
◆要等待来自客户的消息。


你可以使用两个类来帮助你实现Swing线程:

◆SwingWorker:创建一个后台线程来执行费时的操作。
◆Timer:创建一个线程来执行或多次执行某些代码,在两次执行间间隔用户定义的延迟。

到此,相信大家对“Swing如何使用invokeLater()方法”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI