应该是你没有main()函数,如果有的话不会这样的

解决方案 »

  1.   

    下面就是这个java文件的代码,请高手帮我改改,怎样才能运行!!!!
    import java.applet.Applet;
    import java.text.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.util.*;
    import java.net.*;
    import java.io.*;public class WebCrawler extends Applet implements ActionListener, Runnable {
        public static final String SEARCH = "Search";
        public static final String STOP = "Stop";
        public static final String DISALLOW = "Disallow:";
        public static final int    SEARCH_LIMIT = 50;    Panel   panelMain;
        List    listMatches;
        Label   labelStatus;    // URLs to be searched
        Vector vectorToSearch;
        // URLs already searched
        Vector vectorSearched;
        // URLs which match
        Vector vectorMatches;    Thread searchThread;    TextField textURL;
        Choice    choiceType;    public void init() { // set up the main UI panel
    panelMain = new Panel();
    panelMain.setLayout(new BorderLayout(5, 5)); // text entry components
    Panel panelEntry = new Panel();
    panelEntry.setLayout(new BorderLayout(5, 5)); Panel panelURL = new Panel();
    panelURL.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 5));
    Label labelURL = new Label("Starting URL: ", Label.RIGHT);
    panelURL.add(labelURL);
    textURL = new TextField("", 40);
    panelURL.add(textURL);
    panelEntry.add("North", panelURL); Panel panelType = new Panel();
    panelType.setLayout(new FlowLayout(FlowLayout.LEFT, 5, 5));
    Label labelType = new Label("Content type: ", Label.RIGHT);
    panelType.add(labelType);
    choiceType = new Choice();
    choiceType.addItem("text/html");
    choiceType.addItem("audio/basic");
    choiceType.addItem("audio/au");
    choiceType.addItem("audio/aiff");
    choiceType.addItem("audio/wav");
    choiceType.addItem("video/mpeg");
    choiceType.addItem("video/x-avi");
    panelType.add(choiceType);
    panelEntry.add("South", panelType); panelMain.add("North", panelEntry); // list of result URLs
    Panel panelListButtons = new Panel();
    panelListButtons.setLayout(new BorderLayout(5, 5)); Panel panelList = new Panel();
    panelList.setLayout(new BorderLayout(5, 5));
    Label labelResults = new Label("Search results");
    panelList.add("North", labelResults);
    Panel panelListCurrent = new Panel();
    panelListCurrent.setLayout(new BorderLayout(5, 5));
    listMatches = new List(10);
    panelListCurrent.add("North", listMatches);
    labelStatus = new Label("");
    panelListCurrent.add("South", labelStatus);
    panelList.add("South", panelListCurrent); panelListButtons.add("North", panelList); // control buttons
    Panel panelButtons = new Panel();
    Button buttonSearch = new Button(SEARCH);
    buttonSearch.addActionListener(this);
    panelButtons.add(buttonSearch);
    Button buttonStop = new Button(STOP);
    buttonStop.addActionListener(this);
    panelButtons.add(buttonStop); panelListButtons.add("South", panelButtons); panelMain.add("South", panelListButtons); add(panelMain);
    setVisible(true); repaint();  // initialize search data structures
    vectorToSearch = new Vector();
    vectorSearched = new Vector();
    vectorMatches = new Vector(); // set default for URL access
    URLConnection.setDefaultAllowUserInteraction(false);
        }
      

  2.   


        public void start() {
        }    public void stop() {
    if (searchThread != null) {
        setStatus("stopping...");
        searchThread = null;
    }
        }    public void destroy() {
        }    boolean robotSafe(URL url) {
    String strHost = url.getHost(); // form URL of the robots.txt file
    String strRobot = "http://" + strHost + "/robots.txt";
    URL urlRobot;
    try { 
        urlRobot = new URL(strRobot);
    } catch (MalformedURLException e) {
        // something weird is happening, so don't trust it
        return false;
    } String strCommands;
    try {
        InputStream urlRobotStream = urlRobot.openStream();     // read in entire file
        byte b[] = new byte[1000];
        int numRead = urlRobotStream.read(b);
        strCommands = new String(b, 0, numRead);
        while (numRead != -1) {
    if (Thread.currentThread() != searchThread)
        break;
    numRead = urlRobotStream.read(b);
    if (numRead != -1) {
        String newCommands = new String(b, 0, numRead);
        strCommands += newCommands;
    }
        }
        urlRobotStream.close();
    } catch (IOException e) {
        // if there is no robots.txt file, it is OK to search
        return true;
    } // assume that this robots.txt refers to us and 
    // search for "Disallow:" commands.
    String strURL = url.getFile();
    int index = 0;
    while ((index = strCommands.indexOf(DISALLOW, index)) != -1) {
        index += DISALLOW.length();
        String strPath = strCommands.substring(index);
        StringTokenizer st = new StringTokenizer(strPath);     if (!st.hasMoreTokens())
    break;
        
        String strBadPath = st.nextToken();     // if the URL starts with a disallowed path, it is not safe
        if (strURL.indexOf(strBadPath) == 0)
    return false;
    } return true;
        }    public void paint(Graphics g) {
           //Draw a Rectangle around the applet's display area.
           g.drawRect(0, 0, getSize().width - 1, getSize().height - 1); panelMain.paint(g);
    panelMain.paintComponents(g);
    // update(g);
    // panelMain.update(g);
        }
      

  3.   

    public void run() {
    String strURL = textURL.getText();
    String strTargetType = choiceType.getSelectedItem();
    int numberSearched = 0;
    int numberFound = 0; if (strURL.length() == 0) {
        setStatus("ERROR: must enter a starting URL");
        return;
    } // initialize search data structures
    vectorToSearch.removeAllElements();
    vectorSearched.removeAllElements();
    vectorMatches.removeAllElements();
    listMatches.removeAll(); vectorToSearch.addElement(strURL); while ((vectorToSearch.size() > 0) 
      && (Thread.currentThread() == searchThread)) {
        // get the first element from the to be searched list
        strURL = (String) vectorToSearch.elementAt(0);     setStatus("searching " + strURL);     URL url;
        try { 
    url = new URL(strURL);
        } catch (MalformedURLException e) {
    setStatus("ERROR: invalid URL " + strURL);
    break;
        }     //  the URL as searched (we want this one way or the other)
        vectorToSearch.removeElementAt(0);
        vectorSearched.addElement(strURL);     // can only search http: protocol URLs
        if (url.getProtocol().compareTo("http") != 0) 
    break;     // test to make sure it is before searching
        if (!robotSafe(url))
    break;     try {
    // try opening the URL
    URLConnection urlConnection = url.openConnection(); urlConnection.setAllowUserInteraction(false); InputStream urlStream = url.openStream();
    String type 
      = urlConnection.guessContentTypeFromStream(urlStream);
    if (type == null)
        break;
    if (type.compareTo("text/html") != 0) 
        break; // search the input stream for links
    // first, read in the entire URL
    byte b[] = new byte[1000];
    int numRead = urlStream.read(b);
    String content = new String(b, 0, numRead);
    while (numRead != -1) {
        if (Thread.currentThread() != searchThread)
    break;
        numRead = urlStream.read(b);
        if (numRead != -1) {
    String newContent = new String(b, 0, numRead);
    content += newContent;
        }
    }
    urlStream.close(); if (Thread.currentThread() != searchThread)
        break; String lowerCaseContent = content.toLowerCase(); int index = 0;
    while ((index = lowerCaseContent.indexOf("<a", index)) != -1)
    {
        if ((index = lowerCaseContent.indexOf("href", index)) == -1) 
    break;
        if ((index = lowerCaseContent.indexOf("=", index)) == -1) 
    break;
        
        if (Thread.currentThread() != searchThread)
    break;     index++;
        String remaining = content.substring(index);     StringTokenizer st 
          = new StringTokenizer(remaining, "\t\n\r\">#");
        String strLink = st.nextToken();     URL urlLink;
        try {
    urlLink = new URL(url, strLink);
    strLink = urlLink.toString();
        } catch (MalformedURLException e) {
    setStatus("ERROR: bad URL " + strLink);
    continue;
        }     // only look at http links
        if (urlLink.getProtocol().compareTo("http") != 0)
    break;     if (Thread.currentThread() != searchThread)
    break;     try {
    // try opening the URL
    URLConnection urlLinkConnection 
      = urlLink.openConnection();
    urlLinkConnection.setAllowUserInteraction(false);
    InputStream linkStream = urlLink.openStream();
    String strType 
      = urlLinkConnection.guessContentTypeFromStream(linkStream);
    linkStream.close(); // if another page, add to the end of search list
    if (strType == null)
        break;
    if (strType.compareTo("text/html") == 0) {
        // check to see if this URL has already been 
        // searched or is going to be searched
        if ((!vectorSearched.contains(strLink)) 
          && (!vectorToSearch.contains(strLink))) { // test to make sure it is robot-safe!
    if (robotSafe(urlLink))
        vectorToSearch.addElement(strLink);
        }
    } // if the proper type, add it to the results list
    // unless we have already seen it
    if (strType.compareTo(strTargetType) == 0) {
        if (vectorMatches.contains(strLink) == false) {
    listMatches.add(strLink);
    vectorMatches.addElement(strLink);
    numberFound++;
    if (numberFound >= SEARCH_LIMIT)
        break;
        }
    }
        } catch (IOException e) {
    setStatus("ERROR: couldn't open URL " + strLink);
    continue;
        }
    }
        } catch (IOException e) {
    setStatus("ERROR: couldn't open URL " + strURL);
    break;
        }     numberSearched++;
        if (numberSearched >= SEARCH_LIMIT)
    break;
    } if (numberSearched >= SEARCH_LIMIT || numberFound >= SEARCH_LIMIT)
        setStatus("reached search limit of " + SEARCH_LIMIT);
    else
        setStatus("done");
    searchThread = null;
    // searchThread.stop();
        }    void setStatus(String status) {
    labelStatus.setText(status);
        }    public void actionPerformed(ActionEvent event) {
    String command = event.getActionCommand(); if (command.compareTo(SEARCH) == 0) {
        setStatus("searching...");     // launch a thread to do the search
        if (searchThread == null) {
    searchThread = new Thread(this);
        }
        searchThread.start();
    }
    else if (command.compareTo(STOP) == 0) {
        stop();
    }
        }
            public static void main (String argv[])
            {
                    Frame f = new Frame("WebFrame");
                    WebCrawler applet = new WebCrawler();
    f.add("Center", applet);/* Behind a firewall set your proxy and port here!
    */
                    Properties props= new Properties(System.getProperties());
                    props.put("http.proxySet", "true");
             props.put("http.proxyHost", "webcache-cup");
             props.put("http.proxyPort", "8080");                Properties newprops = new Properties(props);
                    System.setProperties(newprops);
    /**/
                    applet.init();
                    applet.start();
                    f.pack();
                    f.show();
            }}
      

  4.   

    楼上的你说的做一个aaa.java就是把我那个WebClawer.java加到我的工程里面吧,可是还是不好使啊
      

  5.   

    问大侠:上面代码中  List    listMatches;
    声明list对象,怎么编译器告诉我 list 是不明确的。
    请大侠看完了代码告诉小弟一声,
    有礼了!!!!