Reputation: 31
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
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
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
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
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