我在HPC中工作。我有一个applet和一个Java客户端应用程序,通过从我们的TORQUE作业调度程序收到的信息显示集群上运行的作业信息(jobID, jobname, userID, etc.
)。JApplet比Java应用程序GUI运行速度慢30倍
最近,我添加了按钮来按类别按升序或降序排序数据。此外,用户可以通过对数据进行排序来强制更新显示器(之前我有一个计时器每隔10秒从服务器接收新数据并随后更新显示器),但我注意到性能不一致 - 小程序显着滞后。在计时代码中,我发现应用程序平均花了0.05秒到setContentPane()
,而小程序花费了平均1.50秒来用相同的代码执行相同的操作。不管applet是在appletviewer还是浏览器中运行,这个问题都是一样的。
我想强调几乎所有的代码都是一样的。唯一显着的区别是JApplet自己调用setContentPane()
(和其他),而我的应用程序在JFrame上调用这些调用(例如frame.setContentPane()
)。
奇怪的是,第一次调用setContentPane()
为小程序返回约0.13秒。但是,随后的所有呼叫都需要先前注意的时间。
有什么建议吗?我宁愿有一个功能正常的applet,所以我不必在我的用户社区推送应用程序。
编辑:JApplet的事件处理不是问题:在JApplet和Java应用程序之间,关于鼠标移动和位置读取以及玻璃窗格上的弹出绘图的性能是相同的。
编辑2:我刚刚编辑JApplet代码,以便JFrame弹出,应用程序在里面运行,性能与应用程序的匹配!小程序是什么?我已经阅读了几个星期的文章,但没有人明白这个问题 - 几乎完全是“applet不能在我的linux机器上的Firefox浏览器中运行”或“我如何将我的应用程序变成applet”。没有人可以告诉我为什么相同的GUI代码是字面上相同的将在JApplet内部运行得很慢。也就是说,为什么setContentPane()在从JFrame创建的JApplet中有30倍的减速?
我运行applet的原因是因为我想将它嵌入到网页中,弹出的JFrame太干扰了。思考?
Edit3:在继续对此问题进行诊断时,我发现JApplet对setContentPane()的调用使我的CPU使用率高达60-100%。对于应用程序的setContentPane(),情况并非如此,它只会从0.1%跳到〜4%。什么导致了JApplet的所有运营和性能税收开销?
你也可以尝试'appletviewer'。 – trashgod 2012-07-14 19:30:02
“为了方便起见,add和它的变体......已被覆盖,以便根据需要转发到”contentPane“。” - ['JFrame'](http://docs.oracle.com/javase/7/docs/api /javax/swing/JFrame.html) – trashgod 2012-07-14 19:30:20