我正在开发一个客户端应用程序,它接受或拒绝来自服务器的证书,就像任何浏览器一样。有关我工作的更详细说明可以在Code Review中找到。
我用来显示证书的方法是,
public boolean DisplayCertficate(java.security.cert.X509Certificate cert){
final JPanel panel = new JPanel();
String message = " Do you want to accept this certificate? \n"
+ "\n Certificate for: " + cert.getSubjectDN()
+ "\n Certificate issued by: "
+ cert.getIssuerDN()
+ "\n The certificate is valid from: "
+ cert.getNotBefore() + "\n Certificate SN#: "
+ cert.getSerialNumber() + "\n Generated with: "
+ cert.getSigAlgName();
String title = "Security Alert";
String[] options = { "yes", "no" };
int confirm = JOptionPane.showOptionDialog(panel, message, title, JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE,
null, options, options[0]);
if (confirm == JOptionPane.YES_OPTION){
return true;
} else if (confirm == JOptionPane.NO_OPTION) {
return false;
}
else{
return false;
}
}
此函数在另一个类中调用:
if(PopUp.DisplayCertficate((X509Certificate) c) == true){
return true;
}
else{
PopUp.NeedCertificate();
return false;
}
如果我需要来自单个服务器的证书,这可以正常工作。如果我尝试将多个服务器一个接一个地加载到我的客户端UI中,则会快速连续打开多个JOptionPane
窗口。这会冻结显示的证书窗口。
有没有办法可以在我尝试加载的每个证书的不同位置打开一个新的JOptionPane
窗口?
答案 0 :(得分:0)
查看here以获取有关如何设置JOptionPane位置的更多信息。
您必须从JOptionPane对象创建一个JDialog并设置对话框的位置。
要使窗口在不同的位置打开,您可以保存最后的x和y坐标,并在(x + 5,y + 5)或相对于上次打开的JOptionPane的某处打开它。