jasper
jasper

Reputation: 31

cannot instantiate type actionlistener?

import org.jsoup.Jsoup;

@SuppressWarnings("unused")

public class SimpleWebCrawler extends JFrame implements ActionListener {

    JTextField yourInputField = new JTextField(20);
    static JTextArea _resultArea = new JTextArea(200, 200);
    JScrollPane scrollingArea = new JScrollPane(_resultArea);
    private final static String newline = "\n";
    JButton jButton = new JButton("Send Text");

    public SimpleWebCrawler() throws MalformedURLException  {

        yourInputField.addActionListener(new ActionListener());

        class MyActionListener implements ActionListener {
            public void actionPerformed(ActionEvent evt) {
                JTextField textfield = (JTextField)evt.getSource();
                process(textfield.getText());
            }
        }

        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,BorderLayout.SOUTH);
        content.add(jButton, BorderLayout.EAST);

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

    }
}

I got this error cannot instantiate type actionlistener. The line of code is :

yourInputField.addActionListener(new ActionListener());

        class MyActionListener implements ActionListener {
            public void actionPerformed(ActionEvent evt) {
                JTextField textfield = (JTextField)evt.getSource();
                process(textfield.getText());
            }
        }

I am trying to create a JTextField to receive input from the user. Still unsuccessful. WHat has caused the error ?

Upvotes: 3

Views: 15924

Answers (4)

Tom W
Tom W

Reputation: 578

Firstly you need to import ActionListener and ActionEvent, by putting the following lines at the top of your class:

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

Next, move your MyActionListener inner class somewhere other than your constructor - a good place would be after your main method, at the bottom of the class (not inside the main method though).

Finally, replace 'new ActionListener()' with 'new MyActionListener()' in the following line:

yourInputField.addActionListener(new ActionListener());

It will become:

yourInputField.addActionListener(new MyActionListener());

Upvotes: 0

RoflcoptrException
RoflcoptrException

Reputation: 52229

If your trying to use an anonymous inner class, it should look like that:

yourInputField.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent arg0) {
             JTextField textfield = (JTextField)evt.getSource();
                         process(textfield.getText());
        }
    });

But if you want to use a nested class it can look like this:

yourInputField.addActionListener(new MyActionListener());

and then somewhere out of the method you declare the nested class:

      private class MyActionListener implements ActionListener{

        @Override
        public void actionPerformed(ActionEvent e) {
            TextField textfield = (JTextField)evt.getSource();
                             process(textfield.getText());
        }
    }

Upvotes: 4

Ulrik
Ulrik

Reputation: 402

ActionListener is an interface not a class, and you can not instantiate interfaces.

Replace:

yourInputField.addActionListener(new ActionListener());

with:

yourInputField.addActionListener(new MyActionListener());

Upvotes: 1

Bala R
Bala R

Reputation: 108957

ActionListener is an interface and you cannot instantiate an interface like new ActionListener();

I think in your case you want

yourInputField.addActionListener(new MyActionListener());

Upvotes: 0

Related Questions