cannot instantiate type actionlistener?

杀马特。学长 韩版系。学妹 提交于 2019-12-12 16:11:34

问题


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 ?


回答1:


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



回答2:


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

Replace:

yourInputField.addActionListener(new ActionListener());

with:

yourInputField.addActionListener(new MyActionListener());



回答3:


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

I think in your case you want

yourInputField.addActionListener(new MyActionListener());



回答4:


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


来源:https://stackoverflow.com/questions/5525302/cannot-instantiate-type-actionlistener

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!