java 无法实例化类型动作侦听器?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/5525302/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-30 11:32:30  来源:igfitidea点击:

cannot instantiate type actionlistener?

javaswingtextfield

提问by jasper

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 ?

我正在尝试创建一个 JTextField 来接收来自用户的输入。还是没有成功。是什么导致了错误?

回答by RoflcoptrException

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

回答by Ulrik

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

ActionListener 是一个接口而不是一个类,您不能实例化接口。

Replace:

代替:

yourInputField.addActionListener(new ActionListener());

with:

和:

yourInputField.addActionListener(new MyActionListener());

回答by Bala R

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

ActionListener 是一个接口,你不能像这样实例化一个接口 new ActionListener();

I think in your case you want

我认为在你的情况下你想要

yourInputField.addActionListener(new MyActionListener());

回答by Tom W

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

首先,您需要导入 ActionListener 和 ActionEvent,将以下几行放在您的类的顶部:

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

接下来,将 MyActionListener 内部类移到构造函数以外的某个地方 - 一个好地方是在 main 方法之后,在类的底部(虽然不在 main 方法内部)。

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

最后,在以下行中将 'new ActionListener()' 替换为 'new MyActionListener()':

yourInputField.addActionListener(new ActionListener());

It will become:

它会变成:

yourInputField.addActionListener(new MyActionListener());