swing 实时界面刷新

sjhxuelang 2013-10-23 09:54:08
最近做了一个swing的项目,实时从数据库读取数据





界面如图,我是画了一个table,然后用定时器去刷,由于所有数据存储不是存储在一个数据表中,还要对应好第一个参数,所以每个单元格中的数据都要去数据库单独查询,这样就要有很多的查询动作,造成CPU使用率100%,系统很慢,有什么好的办法解决吗?
...全文
1103 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaomm627 2013-11-12
  • 打赏
  • 举报
回复
以前在做多线程socket通讯的时候遇到过类似问题,后来查明原因就是一直在死循环报异常,可我把异常给屏蔽了,结果怎么也没找出原因。 据推测,界面往往出现这种情况,很大一部分情况是你的定时器或者线程部分哪里出现了死循环,不然不可能一个界面几条查询语句cpu就达到100%
xiaomm627 2013-11-12
  • 打赏
  • 举报
回复
这个问题应该转化成怎么动态更新表格数据!(删除,重新添加)。 实时刷新界面。。。 体验太不好了。 一个界面,几条查询cpu就100%了,我敢说影响肯定不再数据库,肯定是你的界面刷新问题。看看你的定时器有没有问题,会不会某些地方存在死循环的情况。。异常处理打印有没有屏蔽,打出来看看。。都有可能。。
xiaomm627 2013-11-12
  • 打赏
  • 举报
回复
另外既然是按条件查,那么我觉得就没必要在进行降序排列了把,直接类似select * from oilwell_backpressure where oilwell_name = 'xxx' 不就行了。加个排序,这么多数据排序的话也是个负担。
xiaomm627 2013-11-12
  • 打赏
  • 举报
回复
如果是一条一条的查询,并且没有用数据库连接池,你查询一次就进行一次数据库的连接、销毁,那么反复的进行几百次建立、销毁数据库连接是比较消耗cpu的,有可能会出现这种情况。 如果真是这种情况,完全没必要一条一条的查,这样太消耗资源了,你可以这么写: select * from oilwell_backpressure where oilwell_name in('广13-4','广64斜-1',...,...,...) order by oilwell_id desc 或者 select * from oilwell_backpressure where oilwell_name ='广13-4' union all select * from oilwell_backpressure where oilwell_name ='广64斜-1' union all ..... 这两种都可以,你试试哪种速度快点。这样查询建立一次连接就ok了。
xiaomm627 2013-11-12
  • 打赏
  • 举报
回复
引用 18 楼 sjhxuelang 的回复:
引用 17 楼 xiaomm627 的回复:
[quote=引用 15 楼 sjhxuelang 的回复:] [quote=引用 14 楼 xiaomm627 的回复:] 以前在做多线程socket通讯的时候遇到过类似问题,后来查明原因就是一直在死循环报异常,可我把异常给屏蔽了,结果怎么也没找出原因。 据推测,界面往往出现这种情况,很大一部分情况是你的定时器或者线程部分哪里出现了死循环,不然不可能一个界面几条查询语句cpu就达到100%
是这样的,不是几条是同时有几百条,另外就是不是一直是100%,查询结束后就降下来了,只在查询的时候,出现,另外我在数据库里用SQL语句测试过了,确实同时查询很慢,约要4秒
那就是你的查询语句有问题,就算查询几百条cpu也不应该达到100%啊。。。把你的查询语句贴出来大家看看[/quote]语句蛮简单的,都是这样的语句,只是我设计的时候不好弄,并发执行,本来数据库数据量就蛮大,直接就很慢了[/quote] 是联合查询还是一条一条的查询?
nicholasbobo 2013-11-12
  • 打赏
  • 举报
回复
你就定时去查吧,也可以的,不过呢,不要一次只查一个单元格,可以一列或者一行同时更新,这样或许会减轻数据库的负担
sjhxuelang 2013-11-12
  • 打赏
  • 举报
回复
引用 17 楼 xiaomm627 的回复:
引用 15 楼 sjhxuelang 的回复:
[quote=引用 14 楼 xiaomm627 的回复:]
以前在做多线程socket通讯的时候遇到过类似问题,后来查明原因就是一直在死循环报异常,可我把异常给屏蔽了,结果怎么也没找出原因。 据推测,界面往往出现这种情况,很大一部分情况是你的定时器或者线程部分哪里出现了死循环,不然不可能一个界面几条查询语句cpu就达到100%
是这样的,不是几条是同时有几百条,另外就是不是一直是100%,查询结束后就降下来了,只在查询的时候,出现,另外我在数据库里用SQL语句测试过了,确实同时查询很慢,约要4秒


那就是你的查询语句有问题,就算查询几百条cpu也不应该达到100%啊。。。把你的查询语句贴出来大家看看[/quote]语句蛮简单的,都是这样的语句,只是我设计的时候不好弄,并发执行,本来数据库数据量就蛮大,直接就很慢了
xiaomm627 2013-11-12
  • 打赏
  • 举报
回复
引用 15 楼 sjhxuelang 的回复:
引用 14 楼 xiaomm627 的回复:
以前在做多线程socket通讯的时候遇到过类似问题,后来查明原因就是一直在死循环报异常,可我把异常给屏蔽了,结果怎么也没找出原因。 据推测,界面往往出现这种情况,很大一部分情况是你的定时器或者线程部分哪里出现了死循环,不然不可能一个界面几条查询语句cpu就达到100%
是这样的,不是几条是同时有几百条,另外就是不是一直是100%,查询结束后就降下来了,只在查询的时候,出现,另外我在数据库里用SQL语句测试过了,确实同时查询很慢,约要4秒
那就是你的查询语句有问题,就算查询几百条cpu也不应该达到100%啊。。。把你的查询语句贴出来大家看看
siemens_chang 2013-11-12
  • 打赏
  • 举报
回复
相信你自己吧骚年,没有什么一次查不出来的。还是用ajax好些
sjhxuelang 2013-11-12
  • 打赏
  • 举报
回复
引用 14 楼 xiaomm627 的回复:
以前在做多线程socket通讯的时候遇到过类似问题,后来查明原因就是一直在死循环报异常,可我把异常给屏蔽了,结果怎么也没找出原因。 据推测,界面往往出现这种情况,很大一部分情况是你的定时器或者线程部分哪里出现了死循环,不然不可能一个界面几条查询语句cpu就达到100%
是这样的,不是几条是同时有几百条,另外就是不是一直是100%,查询结束后就降下来了,只在查询的时候,出现,另外我在数据库里用SQL语句测试过了,确实同时查询很慢,约要4秒
sjhxuelang 2013-11-11
  • 打赏
  • 举报
回复
我主要是觉得现在我用的方法不好,我希望是能够数据库中数据更新后,能够触发软件界面数据的自动更新
fearlessMore 2013-11-07
  • 打赏
  • 举报
回复
效率是与设计者有关的,这就是代码优化,改进效率
sjhxuelang 2013-11-06
  • 打赏
  • 举报
回复
我想问问,有没有比较具体的解决方案?
zqfddqr 2013-11-02
  • 打赏
  • 举报
回复
同意瓶颈不在刷新上。
引用 6 楼 sunbo624 的回复:
非要这么弄 就没什么好办法了 瓶颈不在界面的刷新上
研究研究数据库取值吧。
sjhxuelang 2013-11-02
  • 打赏
  • 举报
回复
有没有接触过那个力控的组态软件的?他那个就是做了这样的一个table,不知道怎么实现的
sunbo624 2013-11-01
  • 打赏
  • 举报
回复
非要这么弄 就没什么好办法了 瓶颈不在界面的刷新上
sjhxuelang 2013-11-01
  • 打赏
  • 举报
回复
谢谢楼上的回复啊。说的很详细,但是这样的话都是整个刷新界面,我希望做成,单元格单独去读取对应的数据库字段,应为不同的对象接受到的数据不完全同步,这样用户体验更好,这个怎么处理?
raistlic 2013-10-29
  • 打赏
  • 举报
回复
- 自定义 TableModel,如果必要的话,再自定义 TableColumnModel - 查询一次完成,用 join - 查询可以在后台线程完成,然后遍历结果集,封装成一个只读(建立之后可在线程间安全传递)的数据列表 List<数据>,用SwingUtilities.invokeLater() 的方式把这个数据列表交给你自定义的 TableModel,更新,fire event - 如果查询用了 SwingWorker,那直接在 done() 里提交 List<数据> 即可 - 要可在线程间安全传递,不但要求 List 是安全的,而且要求里面的 数据 也是安全的
qq14344545 2013-10-29
  • 打赏
  • 举报
回复
数据库可以定义一个视图 view
Inhibitory 2013-10-24
  • 打赏
  • 举报
回复
所以每个单元格中的数据都要去数据库单独查询 问题就在这里,设计不合理。 最好的办法是重新设计数据库与访问更新的数据机制,然后更新table的model的对应数据,不要每次都更新整修table的数据。
加载更多回复(1)

62,614

社区成员

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

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