[swing]如何阻止多次的弹窗?

逗泥丸的平方 2016-07-15 05:51:10
有一个画面数据被更新后会收到推送后,提示 "其他人修改了数据".

public void onMessage(CommonMsg msg) {
if (isSelfCalled) {
// 上个更新请求为己方发出的
isSelfCalled = false;
return;
}
JOptionPane.showMessageDialog(this, "其他人修改了数据");
// 再查询
querySettingData();
}

但是如果收到了多个推送,就会弹出很多次窗口.

而且showMessageDialog会阻塞,不知道如何来判断这个状态?
...全文
229 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
逗泥丸的平方 2016-07-19
  • 打赏
  • 举报
回复
引用 2 楼 adfldk 的回复:
用线程处理?
我现在是这样做的(如1L).. 实在是想不到好办法了 感觉有点蠢 不过暂时好像还没遇到问题
adfldk 2016-07-19
  • 打赏
  • 举报
回复
用线程处理?
逗泥丸的平方 2016-07-18
  • 打赏
  • 举报
回复

public void onMessage(CommonMsg msg) {
 if (isSelfCalled) {
 // 上个更新请求为己方发出的
isSelfCalled = false;
 return;
 }
 JOptionPane.showMessageDialog(this, "其他人修改了数据");
 // 再查询
querySettingData(); 
 }
上面代码没有格式,整理了一下. isSelfCalled 是全局变量,用来记录上一个引起推送的消息是不是自己发出的 大概逻辑是,多个用户同时打开这一画面的时候,一个人修改了数据并提交,其他人都会收到推送,然后进行再查询(querySettingData). onMessage为底层提供的接口,订阅以接收广播. 有没有其他的不会阻塞的弹窗方式? 如果做一个延时处理(如下),会不会有什么风险?

public void onMessage(CommonMsg msg) {
			if (isSelfCalled) {
				// 上个更新请求为己方发出的
				isSelfCalled = false;
				return;
			}
			if (delayFlg) {
				return;
			} else {
				showMsgView("其他人修改了系统参数!");
				delayFlg = true;
				Thread thread = new Thread() {
					@Override
					public void run() {
						super.run();
						try {
							Thread.sleep(10);
							delayFlg = false;
						} catch (InterruptedException e) {
							e.printStackTrace();
						}
					}
				};
				thread.start();
			}
			querySettingData();
		}

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧