未调用身份验证器 getPasswordAuthentication

Authenticator getPasswordAuthentication not called

我是网络编程的新手。 这是我的代码:

public class ComputerNetworks extends Authenticator {
    private JDialog passwordDialog;
    private JLabel mainLabel= new JLabel("Please enter username and password: ");
    private JLabel userLabel = new JLabel("Username: ");
    private JLabel passwordLabel = new JLabel("Password: ");
    private JTextField usernameField = new JTextField(20);
    private JPasswordField passwordField = new JPasswordField(20);
    private JButton okButton = new JButton("OK");
    private JButton cancelButton = new JButton("Cancel");

    public ComputerNetworks( ) {
        this("", new JFrame());
    }

    public ComputerNetworks(String username) {
        this(username, new JFrame());
    }

    public ComputerNetworks(JFrame parent) {
        this("", parent);
    }

    public ComputerNetworks(String username, JFrame parent) {
        this.passwordDialog = new JDialog(parent, true);
        Container pane = passwordDialog.getContentPane( );
        pane.setLayout(new GridLayout(4, 1));
        pane.add(mainLabel);
        JPanel p2 = new JPanel( );
        p2.add(userLabel);
        p2.add(usernameField);
        usernameField.setText(username);
        pane.add(p2);
        JPanel p3 = new JPanel( );
        p3.add(passwordLabel);
        p3.add(passwordField);
        pane.add(p3);
        JPanel p4 = new JPanel( );
        p4.add(okButton);
        p4.add(cancelButton);
        pane.add(p4);
        ActionListener al = new OKResponse( );
        okButton.addActionListener(al);
        usernameField.addActionListener(al);
        passwordField.addActionListener(al);
        cancelButton.addActionListener(new CancelResponse( ));
        passwordDialog.pack( );
        passwordDialog.setVisible(true);

    }

    private void show( ) {
        String prompt = this.getRequestingPrompt( );
        if (prompt == null) {
            String site = this.getRequestingSite().getHostName( );
            String protocol = this.getRequestingProtocol( );
            int port = this.getRequestingPort();
            if (site != null & protocol != null) {
                prompt = protocol + "://" + site;
                if (port > 0) 
                    prompt += ":" + port;
            } else {
                prompt = "";
            }
        }
        mainLabel.setText("Please enter username and password for "
            + prompt + ": ");
        passwordDialog.pack();
        passwordDialog.setVisible(true);
    }


    PasswordAuthentication response = null;

    class OKResponse implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            System.out.println("OK clicked");
            passwordDialog.setVisible(false);
            // The password is returned as an array of
            // chars for security reasons.
            char[] password = passwordField.getPassword( );
            String username = usernameField.getText( );
            // Erase the password in case this is used again.
            passwordField.setText("");
            response = new PasswordAuthentication(username, password);
        }
    }

    class CancelResponse implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            passwordDialog.hide( );
            // Erase the password in case this is used again.
            passwordField.setText("");
            response = null;
        }
    }

    public PasswordAuthentication getPasswordAuthentication( ) {
        this.show();
        return this.response;
    }

    public static void main(String[] args) throws Exception {
        Authenticator.setDefault(new ComputerNetworks());
        URL u = new URL("http://www.google.co.in");
        InputStream in = u.openStream();
    }
}

我是 运行 这个来自 IDE 的代码。问题是 AuthenticatorgetPasswordAuthentication() 方法没有被调用,尽管我已经用 URL 打开了一个流。 请帮忙。 提前致谢

来自JavaDoc

getPasswordAuthentication()

protected PasswordAuthentication getPasswordAuthentication() Called when password authorization is needed. Subclasses should override the default implementation, which returns null. Returns: The PasswordAuthentication collected from the user, or null if none is provided.

google.co.in,据我所知,不需要密码授权。因此,不使用 Authenticator。尝试输入 需要身份验证的 URL,看看是否有帮助。