получение недопустимого аргумента исключения - PullRequest
1 голос
/ 01 апреля 2011
import org.jsoup.Jsoup;
import javax.swing.*;
import org.jsoup.helper.Validate;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Scanner;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;


@SuppressWarnings("unused")
public class SimpleWebCrawler extends JFrame  {

    JTextField yourInputField = new JTextField(20);
    static JTextArea _resultArea = new JTextArea(100, 100);
    JScrollPane scrollingArea = new JScrollPane(_resultArea);
    private final static String newline = "\n";



    public SimpleWebCrawler() throws MalformedURLException {

        String word2 = yourInputField.getText();


        _resultArea.setEditable(false);



        try {
            URL my_url = new URL("http://" + word2 + "/");
            BufferedReader br = new BufferedReader(new InputStreamReader(
                    my_url.openStream()));
            String strTemp = "";
            while (null != (strTemp = br.readLine())) {
                _resultArea.append(strTemp + newline);
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }

        _resultArea.append("\n");
        _resultArea.append("\n");
        _resultArea.append("\n");


        String url = "http://" + word2 + "/";
        print("Fetching %s...", url);

        try{
        Document doc = Jsoup.connect(url).get();
        Elements links = doc.select("a[href]");


        System.out.println("\n");

        BufferedWriter bw = new BufferedWriter(new FileWriter("C:\\Users\\user\\fypworkspace\\FYP\\Link\\abc.txt"));
        _resultArea.append("\n");
        for (Element link : links) {
            print("  %s  ", link.attr("abs:href"), trim(link.text(), 35));

            bw.write(link.attr("abs:href"));
            bw.write(System.getProperty("line.separator"));
        }
        bw.flush();
        bw.close();
        } catch (IOException e1) {

        }
        JPanel content = new JPanel();
        content.setLayout(new BorderLayout());
        content.add(scrollingArea, BorderLayout.CENTER);
        content.add(yourInputField);



        this.setContentPane(content);
        this.setTitle("Crawled Links");
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        this.pack();




        }

        private static void print(String msg, Object... args) {

            _resultArea.append(String.format(msg, args) +newline);
        }

        private static String trim(String s, int width) {
            if (s.length() > width)
                return s.substring(0, width - 1) + ".";
            else
                return s;


        }

        //.. Get the content pane, set layout, add to center




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



        JFrame win = new SimpleWebCrawler();
        win.setVisible(true);



    }
}

Привет, это мой код для извлечения ссылок с веб-адреса. Пользователь введет нужный URL, и этот код извлечет ссылки из URL.

Этот код предлагает пользователю ввести URL-адрес в консоли ECLIPSE IDE. После ввода ввода код извлекает ссылки из URL и передает вывод в JTextArea.

Что я хотел сделать сейчас, так это то, что я хотел бы создать поле Jtext для получения пользовательского ввода, а не пользовательского ключа для ввода внутри консоли.

Строка кода, которая отвечает за обработку ввода строки:

 URL my_url = new URL("http://" + word2 + "/");
 String url = "http://" + word2 + "/";

однако я получаю недопустимое исключение аргумента, которое описывает

protocol = http host = null.

Чего мне не хватает?

Ответы [ 2 ]

0 голосов
/ 01 апреля 2011

Проблема в том, что вы пытаетесь сформулировать URL слишком рано; даже до того, как ваш графический интерфейс создан. поэтому word2 это просто пустая строка, поэтому URL выглядит как "http:///", что недопустимо. Попробуйте добавить JButton и попытаться извлечь ссылки из веб-страниц при нажатии кнопки.

0 голосов
/ 01 апреля 2011

Когда объект создается, вы создаете новый, свежий JTextField. Однако вы нигде не отображаете этот JTextField, поэтому пользователь не может вводить в него данные. Поскольку они не могут вводить данные, то вновь созданный JTextField возвращает значение null, когда вы вызываете getText ().

Лучше всего было бы либо отобразить JTextField в форме и запустить сканирование HTTP только после того, как кто-то нажмет «Пуск», либо лучше изменить конструктор, чтобы он принимал аргумент String, который является базовым хостом для URL Вы хотите скачать. Затем SimpleWebCrawler выполняет всю работу, а затем вы можете создать другой класс, который отображает форму.

, например

    public SimpleWebCrawler(String word2) throws MalformedURLException {

    // We don't need this any more
    //String word2 = yourInputField.getText();

    _resultArea.setEditable(false);



    try {
        URL my_url = new URL("http://" + word2 + "/");
        BufferedReader br = new BufferedReader(new InputStreamReader(
                my_url.openStream()));
        String strTemp = "";
        while (null != (strTemp = br.readLine())) {
            _resultArea.append(strTemp + newline);
        }
    } catch (Exception ex) {
        ex.printStackTrace();
    }

    // Rest of your constructor goes here...
...