swing 后台操作事件长 , 界面如何显示正在等待? swing 后台操作事件长 , 界面如何显示正在等待? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 做一个dialog 显示等待界面后面用一个线程执行,执行完成关掉dialog就可以了。 SwingWorker, 就是解决后台操作时间过长,导致用户体验差这个事情的。对于一般不是超长时间处理,但又不想卡住界面的场景,SwingWorker是最合适的。如果是超长时间处理,则可以在SwingWorker任务执行后,起一个modal的对话框,做一个进度条,SwingWorker也可以通过中间过程和进度条交互。JDK6中已经包含了SwingWorker,老版本JDK的SwingWorker也可以在网上下载到,给你个简单教程http://www.javaresearch.org/article/7788.htm。 SwingWorker ,我会用就是前台的进度条不会,dialog是带ok按钮的,不能用 对的 dialog是需要重写的比如有取消按钮的是可以终止的没有取消按钮的是不能终止的。SwingWorker 我还没用过 以前都是自己写的 回去研究一下 网页做起来很简单的东西,swing真费尽 dialog自己简单写一个(扩展自JDialog),要不要ok按钮或其它什么的完全由你自己决定,有什么不能用的?SwingWorker最完美的就是后台执行过程中可以控制EDT线程中途的变化。如果你还不会通过SwingWorker控制进度条,那你的SwingWorker用得还不到家,好好看看我上面给的例子吧。Swing其实很简单,比网页要简单多了。 我一般用SwingWorker,但是在以前版本的jdk中的不包含,得自己下载一个。 写一个线程,同时启动后台处理和线程等待dialog,如果后台处理结束,dialog.dispose(); 1、鼠标致盲,但是通常意义下的致盲只是假致盲,鼠标还是可以操作的。 除非你接管事件派发线程。2、弹出Dialog、ProgressBar,但是这个用户还是可以操作的3、使用Window代替Dialog,在Window中添加ProgressBar组件,同时设置鼠标的致盲状态。通常这种情况需要将耗时的后台处理另起线程处理,避免阻塞事件派发线程,在异常、处理完成之后更新标志位,关闭Window。 // 执行刷新 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构造函数中 JAVA API Frame类的问题? 继承一个JComboBox 还能在GUI里面画出来吗? Java连接MYSQL的问题 有关Web Service传递复杂类型的问题 看看这个程序....多态在哪儿? 两个星期了,还没做出来,救急呀! jar 文件的运行问题 如何处理数学符号的问题。请指教!分不够可以再加, int/string JAVAFX相关问题 做一个简单的java编译器,怎么做项目管理打开工程,文件 一个学习中发现的问题,请明白人来解答
后面用一个线程执行,执行完成关掉dialog就可以了。
对于一般不是超长时间处理,但又不想卡住界面的场景,SwingWorker是最合适的。
如果是超长时间处理,则可以在SwingWorker任务执行后,起一个modal的对话框,做一个进度条,SwingWorker也可以通过中间过程和进度条交互。JDK6中已经包含了SwingWorker,老版本JDK的SwingWorker也可以在网上下载到,给你个简单教程http://www.javaresearch.org/article/7788.htm。
比如有取消按钮的是可以终止的
没有取消按钮的是不能终止的。SwingWorker 我还没用过 以前都是自己写的
回去研究一下
dialog自己简单写一个(扩展自JDialog),要不要ok按钮或其它什么的完全由你自己决定,有什么不能用的?
SwingWorker最完美的就是后台执行过程中可以控制EDT线程中途的变化。如果你还不会通过SwingWorker控制进度条,那你的SwingWorker用得还不到家,好好看看我上面给的例子吧。Swing其实很简单,比网页要简单多了。
除非你接管事件派发线程。2、弹出Dialog、ProgressBar,但是这个用户还是可以操作的3、使用Window代替Dialog,在Window中添加ProgressBar组件,同时设置鼠标的致盲状态。通常这种情况需要将耗时的后台处理另起线程处理,避免阻塞事件派发线程,在异常、处理完成之后更新标志位,关闭Window。
// 执行刷新
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构造函数中