Certificado Digital A3

Boa tarde pessoal, estou com um pequeno problema para manipular o certificado digital a3.
Com o certificado conectado, tudo funciona corretamente.
Quando eu retiro o certificado, apresenta a mensagem: “Token has been removed”. O que está correto.
Porém quando eu recoloco o certificado, a mensagem de “Token has been removed” continua aparecendo.
Como se o token não recarregasse.

O que posso fazer?

Segue a classe que eu carrego o certificado.

public class CertificadoA3 {

    private static KeyStore keystore;

    public CertificadoA3() {

    }

    public static KeyStore getInstance(char[] senha) throws MaximaException {
        if (keystore == null) {
            try {
                String fileCfg = "SmartCard.cfg";
                Provider p = new sun.security.pkcs11.SunPKCS11(fileCfg);
                Security.addProvider(p);
                keystore = KeyStore.getInstance("pkcs11", p);
                keystore.load(null, senha);

            } catch (KeyStoreException | IOException | NoSuchAlgorithmException | CertificateException ex) {                
                throw new MaximaException("Ocorreu um ao carregar certificado digial A3.\n" + ex.getMessage());
            }
        }
        return keystore;
    }

}

Agora a classe que eu testo o certificado:

public class ValidaCertificado {

    public Boolean certificadoIsAtivo(String senha) {
        try {
            KeyStore ks = CertificadoA3.getInstance(senha.toCharArray());
            String alias = ks.aliases().nextElement();

            X509Certificate certificate = (X509Certificate) ks.getCertificate(alias);                           
            PrivateKey privatekey = (PrivateKey) ks.getKey(alias, senha.toCharArray());            
            SocketFactoryDinamico socketFactory = new SocketFactoryDinamico(certificate, privatekey);

            //arquivo que contém a cadeia de certificados do serviço a ser consumido
            socketFactory.setFileCacerts(this.getClass().getResourceAsStream("/br/com/maximasolutions/fiscal/nfe/NFeCacerts"));
            return true;
        } catch (KeyStoreException | NoSuchAlgorithmException | UnrecoverableKeyException ex) {            
            Logger.getLogger(ValidaCertificado.class.getName()).log(Level.SEVERE, null, ex);
            return false;
        }

    }

}

Boa tarde, Marco, tudo bem?

Encontrei seu post pois estou procurando algo parecido. Preciso ler o certificado digital A3 via Java mas rodando no Android.

Gostaria de saber se você conseguiu solucionar os problemas e se é possível me orientar quanto a isso.

Abraço!