2011-04-01 15 views
1
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. 

を説明不正な引数の例外を取得?

答えて

0

オブジェクトが構築されると、新しく新しいJTextFieldが作成されます。ただし、このJTextFieldはどこにでも表示されないため、ユーザーはデータを入力することができません。データを入力できないため、新しく作成されたJTextFieldは、getText()を呼び出すとnullを返します。

フォームに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... 
+0

こんにちは、私のコードの外見から、私はjtextfieldの権利を作成するのですか?私は入力を入力し、コードを実行するユーザーを促すjtextfieldが必要です。 – jasper

+0

最初にJTextFieldを作成し、それを表示してテキストを入力し、そのテキストでWebクローラーを実行する必要があります。現時点では、ユーザーがテキストを入力する前にWebクローラーを実行しています。 – Gnat

+0

というのは、SimpleWebCrawlerクラスの外でテキストフィールドを作成する必要があるということですか? – jasper

0

ここで問題となるのは、URLを早期に策定しようとしていることです。あなたのGUIが作成される前でも。したがってword2は空の文字列なので、無効な"http:///"のように見えます。 JButtonを追加し、ボタンを押したときにウェブページからリンクを抽出しようとします。

関連する問題