程序中用Swing组件时应注意,任何java程序都是由主线程中的main()方法开始执行,当main()方法中的JFrame调用setVisiable(true) 后,引发了另一个线程——事件分派线程,而actionPerformed()方法及paintComponent()方法都是在事件分派Swing线程中被调用,所以如果在actionPerformed()方法中有大量的耗时操作,将会导致用户界面无法响应用户请求,造成用户界面锁死。在这种情况下,最好在 actionPerformed()方法中将耗时操作的程序部分移至一个新的Swing线程中实现,这样程序在进行大量计算的同时又可以及时地响应用户请求。
创新互联专业为企业提供渝北网站建设、渝北做网站、渝北网站设计、渝北网站制作等企业网站建设、网页设计与制作、渝北企业网站模板建站服务,十载渝北做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
- packagetestswingguilock;
- importjavax.swing.*;
- importjava.awt.*;
- importjava.awt.event.*;
- publicclassTestSwingGUILock{
- TestSwingGUILock(){
- initGUI();
- }
- voidcostMoreTime(){
- doubled=0;
- //耗费大量时间的操作
- for(inti=0;i
;i++) - d+=i;
- System.out.println("Ihavedosomanyworks!Theresultis"+d);
- }
- voidinitGUI(){
- JButtonjbutton=newJButton("Start");
- jbutton.addActionListener(newActionListener(){
- publicvoidactionPerformed(ActionEvente){
- System.out.println("Youhavepressedme!");
- //将耗时操作放置在新的线程内完成
- newThread(newRunnable(){
- publicvoidrun(){
- costMoreTime();
- }
- }).start();
- }
- });
- JFramejframe=newJFrame();
- Containercontainer=newContainer();
- container.setLayout(newBorderLayout());
- container.add(jbutton,BorderLayout.SOUTH);
- jframe.setContentPane(container);
- jframe.setSize(200,200);
- jframe.setVisible(true);
- jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- }
- publicstaticvoidmain(String[]args){
- newTestSwingGUILock();
- }
- }
【编辑推荐】
分享名称:浅析Swing中actionPerformed()方法
当前地址:http://www.shufengxianlan.com/qtweb/news49/70349.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联