не может создать экземпляр actionlistener типа? - PullRequest
3 голосов
/ 02 апреля 2011
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);

    }
}

Я получил эту ошибку не могу создать экземпляр actionlistener типа.Строка кода:

yourInputField.addActionListener(new ActionListener());

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

Я пытаюсь создать JTextField для получения ввода от пользователя.Все еще неудачно.Что вызвало ошибку?

Ответы [ 4 ]

4 голосов
/ 02 апреля 2011

Если вы пытаетесь использовать анонимный внутренний класс, он должен выглядеть так:

yourInputField.addActionListener(new ActionListener() {

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

Но если вы хотите использовать вложенный класс, он может выглядеть так:

yourInputField.addActionListener(new MyActionListener());

и затем где-то вне метода вы объявляете вложенный класс:

      private class MyActionListener implements ActionListener{

        @Override
        public void actionPerformed(ActionEvent e) {
            TextField textfield = (JTextField)evt.getSource();
                             process(textfield.getText());
        }
    }
1 голос
/ 02 апреля 2011

ActionListener - это интерфейс, а не класс, и вы не можете создавать экземпляры интерфейсов.

Заменить:

yourInputField.addActionListener(new ActionListener());

с:

yourInputField.addActionListener(new MyActionListener());
0 голосов
/ 03 апреля 2011

Сначала вам нужно импортировать ActionListener и ActionEvent, поместив следующие строки в верхней части вашего класса:

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

Затем переместите ваш внутренний класс MyActionListener куда-нибудь, кроме вашего конструктора - хорошее место было бы после вашего основного метода, внизу класса (но не внутри основного метода).

Наконец, замените «новый ActionListener ()» на «новый MyActionListener ()» в следующей строке:

yourInputField.addActionListener(new ActionListener());

станет:

yourInputField.addActionListener(new MyActionListener());
0 голосов
/ 02 апреля 2011

ActionListener - это интерфейс, и вы не можете создать экземпляр такого интерфейса, как new ActionListener();

Я думаю, что в вашем случае вы хотите

yourInputField.addActionListener(new MyActionListener());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...