java - JApplet 运行速度比 Java 应用程序 GUI 慢 30 倍

标签 java performance swing user-interface japplet

我在 HPC 工作。我有一个小程序和一个 Java 客户端应用程序,它们通过从我们的 TORQUE 作业调度程序接收到的信息显示有关在集群上运行的作业(jobID、jobname、userID 等)的信息。

最近,我添加了按钮以按值的升序或降序按类别对数据进行排序。通过此添加,用户可以通过对数据进行排序来强制更新显示(以前我有一个计时器,每 10 秒从服务器接收一次新数据并随后更新显示),我注意到性能上的差异- 小程序明显滞后。放入计时代码,我发现应用程序平均花费 0.05 秒来 setContentPane() 而小程序平均花费 1.50 秒来执行相同代码的相同操作。无论小程序是在 appletviewer 还是浏览器中运行,这个问题都是一样的。

我想强调的是,几乎所有代码都是相同的。唯一显着的区别是 JApplet 对自身进行 setContentPane()(和其他)调用,而我的应用程序对 JFrame 进行这些调用(例如 frame.setContentPane() ).

奇怪的是,为小程序调用 setContentPane() 的第一次调用在大约 0.13 秒后返回。但是,所有后续调用都需要先前记录的时间。

有什么建议吗?我更希望有一个功能正常的小程序,这样我就不必在我的用户社区中推送该应用程序。

编辑:JApplet 的事件处理不是问题:JApplet 和 Java 应用程序在鼠标移动和位置读取以及玻璃 Pane 上的弹出绘图方面的性能是相同的。

Edit2:我刚刚编辑了 JApplet 代码,因此会弹出一个 JFrame 并在其中运行应用程序,并且性能与该应用程序相匹配!Applet 有什么用?几周来我一直在阅读有关它们的文章,但没有人阐明这个问题——几乎完全是“applet 不能在我的 linux 机器上的 firefox 浏览器中运行”或“我如何将我的应用程序变成一个 applet”。没有人能告诉我为什么完全相同的 GUI 代码 完全相同 在 JApplet 中运行起来会慢得离谱。也就是说,为什么 setContentPane() 在从 JFrame 创建的 JApplet 中速度降低了 30 倍???

我运行小程序的原因是因为我想将它嵌入到网页中,弹出的 JFrame 太麻烦了。想法?

Edit3:在继续诊断这个问题时,我发现 JApplet 调用 setContentPane() 会使我的 CPU 使用率达到 60-100%。应用程序的 setContentPane() 不是这种情况,它只会从 0.1% 跳到 ~4%。是什么导致了 JApplet 的所有操作和性能开销?

最佳答案

重构您的应用程序以使用此 hybrid方法。它有两个优点:

关于java - JApplet 运行速度比 Java 应用程序 GUI 慢 30 倍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11477565/

相关文章:

java - 使用 Spring MVC 在应用程序启动时执行 Java 类

java - 有没有一种方法可以使用 WHERE 子句查询 SQLite 数据库,但该子句并不总是设置所有属性?

ruby-on-rails - 返回 : Higher development speed than others?

java - 如何在单击netbeans上设置多个jlabel的颜色?

java - 从 JButton 更改 JLabel 的图像

java - 使用 Maven 构建多架构 SWT 应用程序

java - 在 PDFBox 中将文本样式设置为带下划线

sql-server-2005 - SQL Server 性能 : derived table vs. 公用表表达式 (CTE)

c# - 如何阻止 EF 生成无用代码,这有关系吗?

Java - JTextField 填充所有框架