`
icarusliu
  • 浏览: 237174 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Swing后台耗时操作的处理

阅读更多

 

<!--[if !supportLists]-->1.       <!--[endif]-->关于Swing的后台长时操作

Swing UI当中,如果一个后台操作特别耗时,会导致GUI界面暂时无法响应的情况出现。为了解决这样的问题,引用SwingWorker类来完成后台耗时操作。

其程序框架大致如下:

SwingWorker worker = new SwingWorker<YourReturnType, YourInterType>() {

            @Override
            protected YourReturnType doInBackground() throws Exception {
                //此处进行耗时操作
                ...

                //可以设定一个判定,如果程序执行没有结束,那么执行中间操作
                while(...){
                    ...
                     publish(new YourInterType());//在这之后将调用Process进行处理
                }

                return ...;
            }

            @Override
            public void Process(List<YourInterType){
               //进行中间结果的处理,如设定进程条的值等
                ...
            }

            @Override
            public void done() {
                try {
                    YourReturnType y = get();
                    ...//进行需要的处理,如GUI界面的响应等
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
        };

        worker.execute();

 

如:

 

 SwingWorker worker = new SwingWorker<Boolean, Void>() {

            @Override
            protected Boolean doInBackground() throws Exception {             
                Database db = new Database(eName.getText(), cName.getText());
                return new CreateImpl(db).createDatabase();
            }


            @Override
            public void done() {
                try {
                    String mess = "操作失败!";
                    b = get();
                    if (b) {
                        doClose(RET_OK);
                        mess = "恭喜,操作成功!";
                    }
                    com.mess.setText(mess);
                   
                    frame.setDone();
                    frame.dispose();
                    com.setVisible(true);
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
        };

        worker.execute();

 

SwingWorker会将耗时操作放在后台进行。用户主要要使用的是两个方法,一是doInBakcground,一是done。其中doInBackground调用耗时操作,而done处理当操作完成之后的响应。

SwingWorker第一个参数指定的是doInBackground返回的类型,而第二个参数指定的是中间处理结果的类型。在这里不用对其中间结果进行处理,因此将第二个参数指定成Void

 

其中,为了使得Workerdone中能够访问用户数据,应该将用户数据申明成主类的成员变量。

分享到:
评论

相关推荐

    Swing速度慢和反映迟钝原因

    通过继承SwingWorker类并重写`doInBackground`方法,可以在后台线程中执行耗时操作。在`doInBackground`方法中执行的任务不会阻塞UI线程。 ```java public class MySwingWorker extends SwingWorker, Integer&gt; { ...

    java swing漂亮界面 超酷 javaswing教程

    9. **SwingWorker**:这是一个异步执行任务的类,用于在后台线程中执行耗时操作,防止阻塞用户界面。 10. **组件拖放(DnD)**:Swing 提供了拖放功能,使用户能够通过简单的拖动操作来移动或复制组件。 了解并熟练...

    swing_hack,swing_hack

    它允许在后台线程执行耗时操作,同时在完成或进度改变时更新用户界面,保证了UI的响应性。 8. **JFrame和JDialog**: JFrame是Swing中最常见的顶级容器,用于创建窗口应用程序。JDialog则用于创建对话框,它可以是...

    swing 鼠标事件 loading效果

    在Java的Swing库中,鼠标事件(Mouse Events)是用户与GUI组件交互的重要部分,而loading效果则通常指的是在处理耗时操作时显示的一种视觉指示,以告知用户程序正在运行且尚未完成。本篇文章将深入探讨如何在Swing...

    java swing 增删改查

    10. **线程处理**:由于Swing组件不是线程安全的,所以在进行耗时操作如数据库查询时,通常会在后台线程(如SwingWorker)中执行,以防止阻塞UI。 这个项目是一个很好的学习实践,涵盖了Swing的基础知识以及数据库...

    java swing界面教程

    9. **Swing Worker**:Swing Worker类用于在后台线程执行耗时操作,避免阻塞用户界面。这是Swing中的并发处理机制,有助于实现UI的响应性。 10. **JTable和JTree**:这两个组件分别用于显示表格数据和树形结构数据...

    Java_swing_api_中文

    7. **Swing Worker**:Swing Worker类是用来处理后台任务的,它解决了Swing组件在主UI线程外执行耗时操作的问题,避免了用户界面的冻结。 8. ** Nimbus Look and Feel**:Nimbus是Swing自带的一种现代外观和感觉,...

    javaswing

    用于在后台线程执行耗时任务,避免阻塞UI。SwingWorker提供了publish和process方法,实现数据的后台处理和UI更新。 8. **国际化(Internationalization, i18n)**: Swing支持多语言应用。通过ResourceBundle,...

    java swing 学习教程

    - 为了防止UI线程阻塞,Swing引入了SwingWorker,用于在后台线程执行耗时任务,然后将结果传递回主线程更新界面。 8. **对话框(Dialogs)** - JOptionPane 提供了标准的对话框,如消息框、确认框、输入框等,...

    java-swing精通电子书(chm)

    在实际开发中,Swing提供了SwingWorker类来处理耗时的任务,确保这些任务在后台线程中执行,避免阻塞用户界面。你可能还会学习到如何使用 Nimbus 或 Metal 等LookAndFeel来自定义应用的视觉样式。 最后,Swing示例...

    Swing 组件大全

    通过SwingWorker,开发者可以在后台线程中执行耗时操作,并在完成后更新UI。 8. **Swing国际化与本地化**: - Swing支持应用程序的国际化和本地化,可以方便地为不同语言的用户提供相应的界面。 综上所述,Swing...

    Swing JAVA 文件比较 工具

    可以使用SwingWorker来在后台线程执行耗时的文件读取和比较操作,避免阻塞用户界面。完成后,SwingWorker的结果可以用来更新UI,展示比较结果。 总的来说,开发一个Swing Java文件比较工具需要掌握以下几点: 1. ...

    java swing简单开发实例

    Java Swing是Java GUI(图形...总的来说,这个"java swing简单开发实例"涵盖了Java Swing的基本组件使用、事件处理、文件I/O操作以及多线程编程等多个关键知识点,对于学习和理解Java桌面应用开发具有很好的实践价值。

    jdk_swing_源码实现分析

    6. **SwingWorker**:为了实现后台任务处理,Swing引入了SwingWorker类。它允许在事件调度线程之外执行耗时的操作,同时提供更新UI的能力,确保UI的响应性。 7. **JTable和JTree**:这两个组件是Swing中的数据展示...

    几个swing多线程的例子

    然而,由于 Swing 组件默认在主线程(Event Dispatch Thread, EDT)中运行,如果在处理耗时操作时直接在 EDT 中执行,会导致界面无响应,用户体验下降。因此,多线程在 Swing 应用程序中显得尤为重要。 多线程允许...

    aspect-swing-worker-1.1.jar.zip

    《深入理解Aspect-Swing-Worker-1.1.jar在Java编程中的应用》 在Java开发领域,库文件的使用是提升代码效率、实现特定功能...对于需要处理大量后台任务或进行复杂逻辑控制的Swing应用来说,这是一个非常有价值的工具。

    java精通swing程序设计.chm

    对于 Swing 的高级主题,如SwingWorker,它是用于在后台线程执行耗时任务以避免阻塞用户界面的重要工具。书中会解释如何正确地使用SwingWorker来处理异步操作,确保GUI的响应性和用户体验。 总之,《Java精通Swing...

    swing学 习 资 料

    3. **事件处理**:Swing采用事件监听器模型,用户可以通过实现特定的监听器接口(如ActionListener、MouseListener)来响应用户的操作,如点击按钮、选择菜单项等。 4. **模型-视图-控制器(MVC)模式**:Swing组件...

    Java Swing(第二版)

    10. **SwingWorker**:SwingWorker是用于在后台线程执行耗时任务的类,防止UI冻结。它支持进度报告和取消操作,使GUI保持响应性。 通过阅读《Java Swing(第二版)》的源码,开发者不仅可以深入理解Swing的工作原理,...

Global site tag (gtag.js) - Google Analytics