2014-03-03 13 views
0

總之,我想知道,如果我在已經大小的框架上調用JFrame.pack(),分析它還是需要很長時間,還是會立即返回?我要求提高效率的原因。我的框架中有一張圖片在循環中每秒更新多次。現在JFrame.pack()必須至少繪製第一張照片後才能調用,以確保該幀的尺寸合適。反覆使用JFrame.pack()的Swing - 效率如何?

爲了解決這個問題我有什麼(在僞代碼)是:

boolean flag = false 
while (condition) { 
    getNextPicture(); 
    updateFrameWithPicture() 
    if (!flag) { 
     frame.pack() 
     flag = true; 
    } 
} 

現在我在想,如果,如果我只是離開了該標誌的檢查,總是叫frame.pack()就不會有問題。如果框架已經是正確的大小,程序能夠足夠快地決定嗎?

+0

試試看看會發生什麼。然後你可以在這裏報告你的結果。雖然我懷疑你應該使用while循環,因爲你可能會阻塞Event Dispatch Thread並阻止它更新GUI。通常你會使用Swing Timer來安排更新。閱讀[Concurrency]上的Swing教程部分(http://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html)以獲取更多信息。該教程還包含「如何使用計時器」部分。 – camickr

+0

@camickr當我顯示在RTP套接字上接收到的圖像時,我估計性能差異。我實際上使用了一個搖擺計時器 - 只是認爲用一個while循環來描述我的問題會更容易一些。 –

回答

1

當我顯示在RTP套接字上接收到的圖像時,整Tr來評估性能差異。

您正在優化您的代碼。通過套接字獲取外部數據總是比重新繪製幀要慢。

我實際使用擺動計時器

你不應該使用定時器做插座上的圖像的實際讀數。正在讀取圖像時,GUI將被阻擋。您應該使用單獨的線程來讀取圖像。它可能會更好地使用SwingWorker,然後publish()圖像,因爲它們變得可用。請閱讀Swing教程Concurrency中的部分以獲取更多信息。

只是覺得用一個while循環來描述我的問題會更容易。

不,最好給出實際的代碼,因爲您可以看到您當前的代碼不正確。不要猜測你在做什麼。