本篇内容主要讲解“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()方法”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。