2011-07-26 27 views
1

私の問題は、ユーザー操作を減らすために、いくつかのユーザー入力をアプレットに保存することです。 私は静的フィールドを使用しています。しかし、ユーザーがブラウザのいくつかのタブに移動した場合、新しい「スレッド」(またはこのようなもの)が開始され、この新しいスレッドの静的クラスが空であることに気付きました。たぶんアプレットにいくつかのデータを保存する別の解決策がありますか?Javaアプレット静的クラス

編集

[OK]をクリックします。詳細。私はデジタル署名のためのアプレットを持っています。ユーザーは一度証明書(X509Certificate)を選択し、それを使用してすべての文書に署名します。私はこのようなクラスを持っている:

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

答えて

2

異なるブラウザタブのアプレットは独立したプログラムです。ブラウザーとJavaプラグインによっては、別のVMでも実行できますが、同じVM内であっても、おそらく独立したクラスローダーがあり、静的変数で通信することはできません。

ユーザーデータを格納する必要がある場合は、JNLP API(たとえば、PersistenceService)を使用できます。

1.6 Sunプラグインでは、アプレットがJNLPによってロードされた場合、IcedTeaプラグイン(OpenJDKの一部のバージョンで配布されます)でのみ使用できます。通常のアプレットタグでロードされたアプレットでも使用できます)。

(私はCookieHandlerのは、アプレットで使用されるか分からない。)

3

アプリケーションの部分との間にユーザー入力を渡すために、静的フィールドを使用すると、非常に悪い習慣です。データは、必要に応じて渡されるオブジェクトに格納する必要があります。

しかし、あなたの場合には、複数のアプレット間でデータを共有するために、最適なソリューションを使用すると、ユーザーデータを格納するための静的フィールドを使用すべきではないようですねjava.net.CookieHandler

+1

http://mindprod.com/jgloss/cookie.htmlアプレットでのCookieHandlerを使用する例があります。 –

0

を使用してブラウザのクッキーに保管することです。また、新しいブラウザタブでは、アプレットの完全に別のインスタンスであるため、新しいスレッドを作成するとは思われません。

+1

これはおそらく別のクラスローダーを使用します(したがって、独立した静的変数を説明します)が、もちろん別の新しいスレッドでも実行されます。 –