Java — Создание веб-браузера

#java #sockets #browser #websocket

#java #розетки #браузер #веб-сокет #сокеты

Вопрос:

Я создаю веб-браузер на Java и получаю следующую ошибку при попытке его запуска:

 Exception in thread "main" java.net.MalformedURLException: no protocol:
  

Мне не удалось найти ответ на мою конкретную проблему, но я полагаю, что это как-то связано с моим сокетом. Нужно ли мне просто добавить исключение MalformedURLException? Любая помощь приветствуется.

 import javax.swing.*;
import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;

public class Browser extends JFrame {

    public JPanel addressPanel, windowPanel;
    public JLabel addressLabel;
    public JTextField textField;
    public JEditorPane windowPane;
    public JScrollPane windowScroll;
    public JButton addressButton;
    private Search search = new Search();

    public Browser() throws IOException {

        addressLabel = new JLabel(" address: ", SwingConstants.CENTER);
        textField = new JTextField("Enter a web address..");
        textField.addActionListener(search);

        addressButton = new JButton("Go");
        addressButton.addActionListener(search);

        windowPane = new JEditorPane("");
        windowPane.setContentType("text/html");
        windowPane.setEditable(false);

        addressPanel = new JPanel(new BorderLayout());
        windowPanel = new JPanel(new BorderLayout());

        addressPanel.add(addressLabel, BorderLayout.WEST);
        addressPanel.add(textField, BorderLayout.CENTER);
        addressPanel.add(addressButton, BorderLayout.EAST);

        windowScroll = new JScrollPane(windowPane);
        windowPanel.add(windowScroll);

        Container pane = getContentPane();
        pane.setLayout(new BorderLayout());

        pane.add(addressPanel, BorderLayout.NORTH);
        pane.add(windowPanel, BorderLayout.CENTER);

        setTitle("Web Browser");
        setSize(1000, 1000);
        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

    public class Search implements ActionListener {

        public void actionPerformed(ActionEvent ea) {

            String line;
            try {

                Socket socket = new Socket(textField.getText(), 80);
                PrintWriter out = new PrintWriter(socket.getOutputStream());
                BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                out.print("GET / HTTP/1.1rn");
                out.print(textField.getText()   "rnrn");
                out.flush();
                while ((line = in.readLine()) != null) {

                    System.out.println(line);
                }
            } catch (Exception e) {

                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) throws IOException {

        Browser browser = new Browser();
    }
}
  

Комментарии:

1. У вас должен быть протокол в этом URL-адресе.

2. Покажите нам входные данные, которые вы вводите в текстовое поле.

Ответ №1:

Проблема заключалась в том, что строка ниже:

 windowPane = new JEditorPane("");
  

Просто измените на

 windowPane = new JEditorPane();
  

В соответствии с конструктором JEditorPane javadoc:

Создает JEditorPane на основе строки, содержащей спецификацию URL.
@param url URL
@exception IOException, если URL является null или не может быть доступен