swing 后台操作事件长 , 界面如何显示正在等待?

解决方案 »

  1.   

    做一个dialog 显示等待界面
    后面用一个线程执行,执行完成关掉dialog就可以了。
      

  2.   

    SwingWorker, 就是解决后台操作时间过长,导致用户体验差这个事情的。
    对于一般不是超长时间处理,但又不想卡住界面的场景,SwingWorker是最合适的。
    如果是超长时间处理,则可以在SwingWorker任务执行后,起一个modal的对话框,做一个进度条,SwingWorker也可以通过中间过程和进度条交互。JDK6中已经包含了SwingWorker,老版本JDK的SwingWorker也可以在网上下载到,给你个简单教程http://www.javaresearch.org/article/7788.htm
      

  3.   

    SwingWorker ,我会用就是前台的进度条不会,dialog是带ok按钮的,不能用
      

  4.   

    对的 dialog是需要重写的
    比如有取消按钮的是可以终止的
    没有取消按钮的是不能终止的。SwingWorker 我还没用过 以前都是自己写的 
    回去研究一下
      

  5.   

    网页做起来很简单的东西,swing真费尽
      

  6.   


    dialog自己简单写一个(扩展自JDialog),要不要ok按钮或其它什么的完全由你自己决定,有什么不能用的?
    SwingWorker最完美的就是后台执行过程中可以控制EDT线程中途的变化。如果你还不会通过SwingWorker控制进度条,那你的SwingWorker用得还不到家,好好看看我上面给的例子吧。Swing其实很简单,比网页要简单多了。
      

  7.   

    我一般用SwingWorker,但是在以前版本的jdk中的不包含,得自己下载一个。
      

  8.   

    写一个线程,同时启动后台处理和线程等待dialog,如果后台处理结束,dialog.dispose();
      

  9.   

    1、鼠标致盲,但是通常意义下的致盲只是假致盲,鼠标还是可以操作的。
       除非你接管事件派发线程。2、弹出Dialog、ProgressBar,但是这个用户还是可以操作的3、使用Window代替Dialog,在Window中添加ProgressBar组件,同时设置鼠标的致盲状态。通常这种情况需要将耗时的后台处理另起线程处理,避免阻塞事件派发线程,在异常、处理完成之后更新标志位,关闭Window。
      

  10.   


    // 执行刷新
    setCursor(new Cursor(Cursor.WAIT_CURSOR));
    Runnable dealRun = new Runnable() {
    public void run() {
    try {
    _dealLocalRefresh();
    } finally {
    setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
    }
    }
    };
    // 构造WaitDlg
    com.utstar.osn.client.longtask.WaitingDialogWithTimer waitDlg = null;
    if (window instanceof Dialog) {
    waitDlg = new com.utstar.osn.client.longtask.WaitingDialogWithTimer(
    (Dialog) window, dealRun);
    } else {
    waitDlg = new com.utstar.osn.client.longtask.WaitingDialogWithTimer(
    (Frame) window, dealRun);
    }
    waitDlg.show();
    这种方式可以实现swingworker相同的效果。传递一个runnable接口对象,然后和WaitingDialogWithTimer构造函数中