- 确认所使用的智能卡驱动已正确安装,可通过以下代码检查:
SCARDCONTEXT hContext;
LONG returnValue = SCardEstablishContext(SCARD_SCOPE_USER, NULL, NULL, &hContext);
- 检查是否有多个智能卡插槽情况下,将智能卡插入正确的插槽,并通过以下代码选择正确的插槽:
int selectedCard = -1;
String[] readerNames = {"Reader 1", "Reader 2", "Reader 3"};
TerminalFactory factory = TerminalFactory.getDefault();
List terminals = factory.terminals().list();
for (int i = 0; i < readerNames.length; i++) {
for (CardTerminal terminal : terminals) {
if (terminal.getName().contains(readerNames[i])) {
selectedCard = i;
break;
}
}
if (selectedCard != -1) {
break;
}
}
- 确认证书是否正确导入并已正确设置智能卡,可通过以下代码检查证书设置:
KeyStore ks = KeyStore.getInstance("WINDOWS-MY", "SunMSCAPI");
ks.load(null, null);
Enumeration aliases = ks.aliases();
while (aliases.hasMoreElements()) {
String alias = (String)aliases.nextElement();
Certificate[] chain = ks.getCertificateChain(alias);
if (chain != null && chain.length > 0) {
PrivateKey privateKey =
(PrivateKey)ks.getKey(alias, null);
if (privateKey != null) {
System.out.println(privateKey.toString() + " : " + alias);
}
}
}
- 如果所有操作都已正确,但问题仍然存在,请尝试打开安装4j控制台并重新启动计算机,这通常可以解决EV码签名问题。