@Override
    public AuthInfo showPasswordDialog(final String mailAddress, final String password) {

        if (SwingUtilities.isEventDispatchThread()) {

            // ダイアログ表示
            int opt = JOptionPane.showConfirmDialog(new JFrame(), createPasswordDialog(mailAddress, password),
                    getPasswordDialogTitle(), JOptionPane.OK_CANCEL_OPTION, JOptionPane.INFORMATION_MESSAGE,
                    getNormalIcon());

            // メールアドレスが入ってたらパスワードにフォーカス
            if (mailAddress.length() != 0) {
                pass.requestFocus();
            }

            // OKが押下されたら情報取得
            if (opt == JOptionPane.OK_OPTION) {
                final AuthInfo authInfo = factory.createAuthInfo();
                authInfo.setMailAddress(mail.getText());
                authInfo.setPassword(new String(pass.getPassword()));
                return authInfo;
            }
            return null;
        } else {
            final List<AuthInfo> result = new ArrayList<AuthInfo>();
            // イベントディスパッチではない場合はイベントディスパッチで呼びなおし
            try {
                SwingUtilities.invokeAndWait(new Runnable() {
                    @Override
                    public void run() {
                        AuthInfo authInfo = showPasswordDialog(mailAddress, password);
                        result.add(authInfo);
                    }
                });
            } catch (InterruptedException e) {
                // 例外はスルー
            } catch (InvocationTargetException e) {
                // 例外はスルー
            }
            // 念のためサイズ確認してリターン
            if (result.size() != 0) {
                return result.get(0);
            }
            return null;
        }
    }