Java实时曲线绘制

2021-08-30   526 次阅读


Java的人机交互(也就是UI)一直是个痛点,也并非没做过努力,但是基本上也就是达到了“又不是不能用”的层次。加上这几年前端技术的不断进步,感觉Java界面开发这块基本上看不到希望了。

凭胸而论,SWing还是做的不错的,SWT也不错,做到了和本地界面差异不大的程度,但是性能这块始终是个问题。Javafx也许更好,但是自己不熟,这里也不做这几个界面方案的比较,只是记录下自己在绘制曲线上发现的几个问题。

我的项目需要动态实时的显示数据曲线,类似示波器那种。思前想后觉得自己画工作量太大,最终选择了JFreechart。由于界面系统使用的是SWT,所以还用了SWT-JFreechart的扩展包。

说说开发后的体会。

(1)确实应该用JFreechart,自己画曲线还是比较麻烦,而且也不一定能做到JFreechart做到的优化;
(2)JFreechart绘制动态曲线的性能较差,1000个点1秒钟更新一次比较勉强。但是也和机器有关,在没有显卡的机器上性能更差。
(3)仔细研究了JFreechart的代码,感觉这速度基本上就是Java的极限了,这说明Java的绘图性能确实不行。
(4)JFreechart有Javafx版本,性能可能会更好。
(5)还有一个SWTChart据说也可以画曲线,研究了一下,发现无法绘制动态曲线(就是随着时间刷新的曲线),遂作罢。

提高JFreeChart绘图性能的方法:

(1)降采样,减少绘制点的数目;
(2)换好的显卡;
(3)降低刷新频率。

Q.E.D.

知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

No PAINS No GAINS.