获取非法参数异常

问题描述:

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); 



    } 
} 

嗨,这是我的代码从Web地址中提取链接。用户将键入所需的URL,此代码将从URL中提取链接。获取非法参数异常

此代码提示用户在ECLIPSE IDE控制台中键入URL。键入输入后,代码将从URL中提取链接并将输出传输到JTextArea。

我现在想要做的是,我想创建一个Jtextfield来接收用户输入,而不是控制台内输入的用户密钥。

的代码,负责处理字符串输入该生产线是:

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

但是我越来越描述

protocol = http host = null. 

做我丢失了怎么办非法参数异常?

构建对象时,您正在创建一个新的新的JTextField。但是,您不在任何位置显示此JTextField,因此用户无法向其中输入数据。由于它们无法输入数据,因此当您调用getText()时,新创建的JTextField将返回null。

要做的最好的事情是要么在窗体上显示JTextField,而要在有人点击“开始”之后运行HTTP爬网,或者更好地改变构造函数来接受一个字符串参数,该参数是您想要下载的网址。然后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... 
+0

嗨,从我的代码的外观,我创建jtextfield的权利?我需要jtextfield来提示用户输入输入,然后运行代码。 – jasper 2011-04-01 16:42:48

+0

您需要先创建JTextField,然后将其显示并让用户放入一些文本,然后才能使用该文本运行Web爬虫。目前,您在用户有机会输入任何文本之前运行网络抓取工具。 – Gnat 2011-04-01 16:47:16

+0

是否意味着我需要在SimpleWebCrawler类之外创建一个文本字段? – jasper 2011-04-01 17:15:25

这里的问题是你试图公式化URL过早;甚至在GUI创建之前。所以word2只是一个空字符串,因此该URL看起来像"http:///",这是无效的。尝试添加一个JButton,并尝试按下按钮时从网页中提取链接。