Java applet static class



我的问题是在applet中存储一些用户输入以减少用户操作。我使用静态字段。但是我注意到,如果用户在浏览器中打开几个选项卡,那么新的"线程"(或类似的东西)就会启动,并且这个新线程中的静态类是空的。也许有其他的解决方案来保存一些数据在applet?

编辑

Ok。更多的细节。我有一个数字签名的小程序。用户一次选择证书(x509证书)并使用它来签署所有文档。我有一个这样的类:

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

使用静态字段在应用程序的各个部分之间传递用户输入是一个非常糟糕的做法。数据应该存储在对象中,并在必要时传递。

但是在您的情况下,为了在多个applet之间共享数据,最好的解决方案是使用java.net.CookieHandler

将其存储在浏览器cookie中

不同浏览器选项卡中的小程序是独立的程序。根据浏览器和Java-Plugin的不同,它们甚至可能运行在不同的VM中,但即使在同一个VM中,它们也很可能有独立的类加载器,并且无法通过静态变量进行通信。

如果需要存储用户数据,可以使用JNLP API,例如PersistenceService。

在1.6 Sun Plugin中,这只会在你的applet被JNLP加载时可用,在IcedTea Plugin(与某些版本的OpenJDK一起分发)中,它也可以用于通过通常的applet标签加载的applet(没有JNLP)。

(我不知道如何一个CookieHandler将被applet使用)

听起来您不应该使用静态字段来存储用户数据。此外,我不认为一个新的浏览器选项卡会创建一个新的线程,因为它应该是你的applet的一个完全独立的实例。

最新更新