我在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