swing登陆程序的异步loading效果,避免程序假死状态?swing 后台操作事件长 , 界面如何显示正在等待?



swing登陆程序的异步loading效果,避免程序假死状态?swing 后台操作事件长 , 界面如何显示正在等待?

在Java 桌面应用程序开发中,使用swing 进行后台操作时,如果后台执行反应时间长,那么界面就会出现假死状态,swing 给出了这样的解决方案:SwingWorker, 它就是解决后台操作时间过长,导致用户体验差这个事情的。对于一般不是超长时间处理,但又不想卡住界面的场景,SwingWorker是最合适的。如果是超长时间处理,则可以在SwingWorker任务执行后,起一个model的对话框,做一个进度条,SwingWorker也可以通过中间过程和进度条交互。

本文解决非超长时间处理的场景,你可以新建一个类SwingWorkerTest实现SwingWorker接口,并实现它的done()方法和doInBackground()方法。或者直接在单击按钮的监听事件中,直接new SwingWorker:
//参数解释: T:表示做完后台操作需要返回的对象,例如我下面的ReturnCode.V:一般用Void表示,形如下面我的例子。
//doInBackground()方法是你想在后台进行的操作,例如登陆验证操作,我们可以在doInBackground()方法中放置一个gif的动态loading状态图标签,当单击按钮的时候,它会执行doInBackground方法,执行完毕后,再执行done()方法。我们在done方法中做的操作就是参数的传递和关闭当前的Login窗体、显示主窗体。

帮助
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
//原型
new SwingWorker(){
 
             @Override
             protected T doInBackground() throws Exception {
                 // TODO Auto-generated method stub
                 return null ;
             }
             
         @Override
             protected void done() {
          // TODO Auto-generated method stub
          super .done();
         }
};
/**
  * 例子
  *
  **/
new SwingWorker() {
             
             ReturnCode rc = null ;          
             cwa2 cw = null ;        
             @Override
             protected ReturnCode doInBackground() throws Exception {
                 cw = userInfo.getCwServer();
                                 //放置gif动态图片的JLabel
                 loading.setVisible( true );
                                 //登陆验证操作
                 rc = cw.authenticate(userInfo.getUserName(), userInfo.getPassword());
                 return rc;
             }
             
             @Override
             protected void done() {
                 if (rc == cwaapi.SUCCESS) {
                     MainFrm mf = new MainFrm();
                     mf.setUserInfo(userInfo);
                     mf.setLoginName();
                     mf.setVisible( true );
                     frame.dispose();
                 } else {
                     lblWaiting.setText(rc.getMessage());
                     loading.setVisible( false );
                 }
             }
         }.execute();

 
swing登陆程序的异步loading效果,避免程序假死状态?swing 后台操作事件长 , 界面如何显示正在等待?_第1张图片

你可能感兴趣的:(swing登陆程序的异步loading效果,避免程序假死状态?swing 后台操作事件长 , 界面如何显示正在等待?)