#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
или не может быть доступен