获取非法参数异常
问题描述:
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...
答
这里的问题是你试图公式化URL过早;甚至在GUI创建之前。所以word2
只是一个空字符串,因此该URL看起来像"http:///"
,这是无效的。尝试添加一个JButton
,并尝试按下按钮时从网页中提取链接。
嗨,从我的代码的外观,我创建jtextfield的权利?我需要jtextfield来提示用户输入输入,然后运行代码。 – jasper 2011-04-01 16:42:48
您需要先创建JTextField,然后将其显示并让用户放入一些文本,然后才能使用该文本运行Web爬虫。目前,您在用户有机会输入任何文本之前运行网络抓取工具。 – Gnat 2011-04-01 16:47:16
是否意味着我需要在SimpleWebCrawler类之外创建一个文本字段? – jasper 2011-04-01 17:15:25