挂起JOptionPane以获取接受证书的用户界面

时间:2015-08-09 14:33:34

标签: java model-view-controller joptionpane

我正在开发一个客户端应用程序,它接受或拒绝来自服务器的证书,就像任何浏览器一样。有关我工作的更详细说明可以在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窗口?

1 个答案:

答案 0 :(得分:0)

查看here以获取有关如何设置JOptionPane位置的更多信息。

您必须从JOptionPane对象创建一个JDialog并设置对话框的位置。

要使窗口在不同的位置打开,您可以保存最后的x和y坐标,并在(x + 5,y + 5)或相对于上次打开的JOptionPane的某处打开它。