2011-07-26 77 views
1

我的問題是在applet中存儲一些用戶輸入以減少用戶操作。 我使用靜態字段。但我注意到,如果用戶轉到瀏覽器中的多個選項卡 - thr new new「thread」(或類似的東西)開始了,並且我在此新線程中的靜態類是空的。也許有另一種解決方案來保存applet中的一些數據?Java applet靜態類

編輯

確定。更多細節。我有一個數字簽名小程序。用戶一旦選擇證書(X509Certificate)並用它來簽署所有文件。我有一類這樣的:

public class CertificateContainer 
    { 
     private static X509Certificate certificate; 
     ... 

回答

2

不同瀏覽器選項卡中的小程序是獨立的程序。根據瀏覽器和Java插件的不同,它們甚至可能運行在不同的VM中,但即使在同一個VM中,它們也可能具有獨立的類加載器,並且無法通過靜態變量進行通信。

如果您需要存儲用戶數據,則可以使用JNLP API,例如PersistenceService。

對於1.6 Sun插件,只有當您的applet由JNLP加載時,IcedTea插件(與某些版本的OpenJDK一起發佈)纔可用,它也可用於通常applet標記加載的applet(不帶JNLP )。

(我不知道如何的CookieHandler將由小程序可以使用。)

3

使用靜態字段通過應用程序的部分之間的用戶輸入是非常不好的做法。數據應存儲在必要時傳遞的對象中。

但在你的情況下,共享多個小應用程序之間的數據,最好的解決辦法是使用java.net.CookieHandler

+1

http://mindprod.com/jgloss/cookie.html在小程序使用的CookieHandler的例子。 –

0

這聽起來像你不應該使用靜態字段,用於存儲用戶數據,將其存儲在瀏覽器中的cookies。另外,我不認爲新的瀏覽器選項卡會創建一個新的線程,因爲它應該是一個完全獨立的applet實例。

+1

它很可能會使用不同的類加載器(因此解釋了獨立的靜態變量),但當然也可以在單獨的新線程中運行。 –