0

I have this program in java.. it is for captureing network packets by using Winpcap and jpcap...There is a problem at the compile time.. it sends this message:

C:\Users\IMAX\Desktop\PacketPirate\PacketPirate\src\PkPirate_GUI.java:95: error: <anonymous PkPirate_GUI$1> is not abstract and does not override abstract method actionPerformed(ActionEvent) in ActionListener
    {
    ^

can anyone please tell me how to get it to work...here is the complete program source code:

This is for creating the GUI interface

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import jpcap.*;

public class PkPirate_GUI
{

    NetworkInterface [] NETWORK_INTERFACES;
    JpcapCaptor CAP;
    PkPirate_CaptureThread CAPTAIN;
    int INDEX=0;
    int COUNTER =0;
    boolean CaptureState=false;

    ////////////////////////////////////////////////////////////////Frame
    JFrame MainWindow = new JFrame("Packet Capture Program");
    ////////////////////////////////////////////////////////////////Text Area
    public static JTextArea TA_OUTPUT=new JTextArea();
    ////////////////////////////////////////////////////////////////Scroll pane
    JScrollPane SP_OUTPUT=new JScrollPane();
    ////////////////////////////////////////////////////////////////Button Groups
    ButtonGroup BG_Filter_Enable_Disable=new ButtonGroup();
    ButtonGroup BG_Ports=new ButtonGroup();
    ////////////////////////////////////////////////////////////////Buttons
    JButton B_Capture=new JButton("Capture");
    JButton B_Stop=new JButton("Stop");
    JButton B_Select=new JButton("Select");
    JButton B_List=new JButton("List");
    JButton B_Filter=new JButton("Filter");


    //////////////////////////////////////////////////////////////////Raido Buttons

    JRadioButton RB_Filter_Enable = new JRadioButton ("Enable");
    JRadioButton RB_Filter_Disable = new JRadioButton ("Disable");
    JRadioButton RB_Port_Special = new JRadioButton ("Special Port");
    JRadioButton RB_Port_DNS = new JRadioButton ("DNS (53)");


    //////////////////////////////////////////////////////////////////////Lables


    JLabel L_Interface = new JLabel("Interface");
    JLabel L_FilterStatus = new JLabel("Port Filter Status");
    JLabel L_FilterStatusBox = new JLabel("Disabled (All Ports)");
    JLabel L_FilterPresets = new JLabel("Port Filter Presets");
    JLabel L_SpecialPort = new JLabel("Special Port");

    ///////////////////////////////////////////////////////////////////////Text Field

    JTextField TF_SelectInterface = new JTextField();
    JTextField TF_SpecialPort = new JTextField();

    public static void main (String args[])
        {
            new PkPirate_GUI();
        }

    public PkPirate_GUI(){
        BuildGUI();
        DisbleButtons();
        }

    public void BuildGUI()
    {
        MainWindow.setSize(765,480);
        MainWindow.setLocation(200,200);
        MainWindow.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        MainWindow.getContentPane().setLayout(null);
        /////////////////////////////////////////////////////////

        TA_OUTPUT.setEditable(false);
        TA_OUTPUT.setFont(new Font("Monospaced",0,12));
        TA_OUTPUT.setForeground(new Color(0,0,153));
        TA_OUTPUT.setLineWrap(true);
    ///////////////////////////////////////////////////////////////////

    SP_OUTPUT.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
    SP_OUTPUT.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
    SP_OUTPUT.setViewportView(TA_OUTPUT);
    /////////////////////////////////////////////////////////////////////////////////
    MainWindow.getContentPane().add(SP_OUTPUT);
        SP_OUTPUT.setBounds(10,16,740,290);
    /////////////////////////////////////////////////////////////////////////////////
    /////////////////////////////////////////////////////////////////Buttons

    B_Capture.setBackground(new Color(255,0,0));
    B_Capture.setForeground(new Color(255,255,255));
    B_Capture.setMargin(new Insets(0,0,0,0));
    B_Capture.addActionListener(new ActionListener()
    {
        public void actionPerforemed(ActionEvent x)
        {   
                    Action_B_Capture(x);
                }


        });
        MainWindow.getContentPane().add(B_Capture);
        B_Capture.setBounds(145,310,110,25);
//////////////////////////////////////////////////////////////////


    B_Stop.setBackground(new Color(0,0,0));
    B_Stop.setForeground(new Color(255,255,255));
    B_Stop.setMargin(new Insets(0,0,0,0));
    B_Stop.addActionListener(new ActionListener()
    {
        public void actionPerforemed(ActionEvent x)
        {   Action_B_Stop(x);}


        });
        MainWindow.getContentPane().add(B_Stop);
        B_Stop.setBounds(145,310,110,25);
        //////////////////////////////////////////////////////////////////


    B_Select.setBackground(new Color(0,0,0));
    B_Select.setForeground(new Color(255,255,255));
    B_Select.setMargin(new Insets(0,0,0,0));
    B_Select.addActionListener(new ActionListener()
    {
        public void actionPerforemed(ActionEvent x)
        {   Action_B_Select(x);}


        });
        MainWindow.getContentPane().add(B_Select);
        B_Select.setBounds(0,388,75,20);
        //////////////////////////////////////////////////////////////////


    B_List.setBackground(new Color(0,0,0));
    B_List.setForeground(new Color(255,255,255));
    B_List.setMargin(new Insets(0,0,0,0));
    B_List.addActionListener(new ActionListener()
    {
        public void actionPerforemed(ActionEvent x)
        {   Action_B_List(x);}


        });
        MainWindow.getContentPane().add(B_List);
        B_List.setBounds(0,410,75,20);
        //////////////////////////////////////////////////////////////////

    B_Filter.setBackground(new Color(0,0,0));
    B_Filter.setForeground(new Color(255,255,255));
    B_Filter.setMargin(new Insets(0,0,0,0));
    B_Filter.addActionListener(new ActionListener()
    {
        public void actionPerforemed(ActionEvent x)
        {   Action_B_Filter(x);}


        });
        MainWindow.getContentPane().add(B_Filter);
        B_Filter.setBounds(360,400,80,25);


        //////////////////////////////////////////////////////////////////Radio Button
    BG_Filter_Enable_Disable.add(RB_Filter_Enable);
    RB_Filter_Enable.addActionListener(new ActionListener()
        {

        public void actionPerformed(ActionEvent x)
                {Action_B_ENABLE (x);}
        });
        MainWindow.getContentPane().add(RB_Filter_Enable);
        RB_Filter_Enable.setBounds(290,350,70,25);
///////////////////////////////////////////////////////////////////
    BG_Filter_Enable_Disable.add(RB_Filter_Disable);
    RB_Filter_Disable.setSelected(true);
    RB_Filter_Disable.addActionListener(new ActionListener(){

        public void actionPerformed(ActionEvent x)
                {Action_B_DISABLE (x);}
        });
        MainWindow.getContentPane().add(RB_Filter_Disable);
        RB_Filter_Disable.setBounds(360,350,70,25);
        ///////////////////////////////////////////////////////////////////
        BG_Ports.add(RB_Port_Special);
        RB_Port_Special.setFont(new Font("Tahoma",0,11));
        MainWindow.getContentPane().add(RB_Port_Special);
        RB_Port_Special.setBounds(360,380,90,90);


        ///////////////////////////////////////////////////////////////////
        BG_Ports.add(RB_Port_DNS);
        RB_Port_DNS.setFont(new Font("Tahoma",0,11));
        MainWindow.getContentPane().add(RB_Port_DNS);
        RB_Port_DNS.setBounds(560,400,90,25);
        ///////////////////////////////////////////////////////////////////

    ////////////////////////////////////////////////////////////////////
    L_Interface.setHorizontalAlignment(SwingConstants.CENTER);
    MainWindow.getContentPane().add(L_Interface);
    L_Interface.setBounds(10,344,60,16);
    ////////////////////////////////////////////////////////////////////
    L_FilterStatus.setHorizontalAlignment(SwingConstants.CENTER);
    MainWindow.getContentPane().add(L_FilterStatus);
    L_FilterStatus.setBounds(300,310,110,16);
    ////////////////////////////////////////////////////////////////////
    L_FilterStatusBox.setForeground(new Color(255,51,0));
    L_FilterStatusBox.setHorizontalAlignment(SwingConstants.CENTER);
    L_FilterStatusBox.setBorder(BorderFactory.createLineBorder(new Color(0,0,0)));
    MainWindow.getContentPane().add(L_FilterStatusBox);
    L_FilterStatusBox.setBounds(270,330,170,20);
    ///////////////////////////////////////////////////////////////////////////////////
    L_FilterPresets.setFont(new Font("Tahoma",0,10));
    L_FilterPresets.setForeground(new Color(0,153,0));
    L_FilterPresets.setHorizontalAlignment(SwingConstants.CENTER);
    MainWindow.getContentPane().add(L_FilterPresets);
    L_FilterPresets.setBounds(550,310,110,10);
    ////////////////////////////////////////////////////////////////////
    L_SpecialPort.setForeground(new Color(255,0,0));
    L_SpecialPort.setHorizontalAlignment(SwingConstants.CENTER);
    MainWindow.getContentPane().add(L_SpecialPort);
    L_SpecialPort.setBounds(270,380,80,14);
    ////////////////////////////////////////////////////////////////////Text Field
    TF_SelectInterface.setForeground(new Color(255,0,0));
    TF_SelectInterface.setHorizontalAlignment(JTextField.CENTER);
    MainWindow.getContentPane().add(TF_SelectInterface);
    TF_SelectInterface.setBounds(3,364,70,20);
    ///////////////////////////////////////////////////////////////////////////
    TF_SpecialPort.setForeground(new Color(255,0,0));
    TF_SpecialPort.setHorizontalAlignment(JTextField.CENTER);
    MainWindow.getContentPane().add(TF_SpecialPort);
    TF_SpecialPort.setBounds(270,400,80,22);
    ///////////////////////////////////////////////////////////////////////////
    MainWindow.setVisible(true);
        }
////////////////////////////////////////////////////////////////////////////////
public void Action_B_Capture(ActionEvent X){

    TA_OUTPUT.setText("");
    CaptureState=true;
    CapturePackets();
    }
//////////////////////////////////////////////////////////////////////////////////
public void Action_B_Stop(ActionEvent X){

    CaptureState=false;
    CAPTAIN.finished();
    }
/////////////////////////////////////////////////////////////////////////////////
public void Action_B_Select(ActionEvent X){

    ChooseInterface();
    }
/////////////////////////////////////////////////////////////////////////////////
public void Action_B_List(ActionEvent X){

    ListNetworkInterfaces();
    B_Select.setEnabled(true);
    TF_SelectInterface.requestFocus();
    }
/////////////////////////////////////////////////////////////////////////////////
public void Action_B_Filter(ActionEvent X){

   try
   {
       if (RB_Filter_Enable.isSelected()){
       String PORT=TF_SpecialPort.getText();
       CAP.setFilter("port "+PORT,true);

   }
           else if  (RB_Port_DNS.isSelected())
           { CAP.setFilter("port 53",true);}

    else{
    JOptionPane.showMessageDialog(null,"Filtering is Disabled!");

        }


       }
catch(Exception y) 
{
    System.out.println(y);
}
    }

///////////////////////////////////////////////////////////////////////////////////////
    public void Action_B_ENABLE(ActionEvent X){

    L_FilterStatusBox.setText("Enabled(Selected port)");
    }
///////////////////////////////////////////////////////////////////////////////////////
    public void Action_B_DISABLE(ActionEvent X){

    L_FilterStatusBox.setText("Disabled(All ports)");
    }
///////////////////////////////////////////////////////////////////////////////////////
public void CapturePackets()
    {
        CAPTAIN=new PkPirate_CaptureThread()
        {
            public Object construct(){

                TA_OUTPUT.setText("\nNow Captureing on interface" + INDEX+"..."+
                "\n----------------------------------------------------------"+
                "----------------------------------------------------------\n\n");
                try
                {
                    CAP=JpcapCaptor.openDevice(NETWORK_INTERFACES[INDEX],65535,false,20);
                    while (CaptureState)
                    {
                    CAP.processPacket(1,new PkPirate_PacketContents());

                        }
                        CAP.close();
                    }
                catch (Exception x)
                {System.out.print(x);}
                return 0;

                }
public void finished()
{
    this.interrupt();
}

            };
CAPTAIN.start();
        }
///////////////////////////////////////////////////////////////////////////
    public void DisbleButtons()
    {
        B_Capture.setEnabled(false);
        B_Stop.setEnabled(false);
        B_Select.setEnabled(false);
        B_Filter.setEnabled(false);


        }
//////////////////////////////////////////////////////////////////////////
    public void EnableButtons()
    {
        B_Capture.setEnabled(true);
        B_Stop.setEnabled(true);
        B_Select.setEnabled(true);
        B_Filter.setEnabled(true);

        }
//////////////////////////////////////////////////////////////////////////
    public void ListNetworkInterfaces(){
            NETWORK_INTERFACES=JpcapCaptor.getDeviceList();
            TA_OUTPUT.setText("");
            for(int i=0;i<NETWORK_INTERFACES.length;i++)
            {
        TA_OUTPUT.append("\n\n-----------------------------------interface"+i+
                         "Info-----------------------------------");
              TA_OUTPUT.append("\nInterface Number:"+i);
              TA_OUTPUT.append("\nDescription:"+
                                NETWORK_INTERFACES[i].name+"("+
                                NETWORK_INTERFACES[i].description+")");
              TA_OUTPUT.append("\nDatalink Name:"+
                    NETWORK_INTERFACES[i].datalink_name+"("+
                            NETWORK_INTERFACES[i].datalink_description+")");
              TA_OUTPUT.append("\nMAC address:");
              byte[]R= NETWORK_INTERFACES[i].mac_address;
              for(int a=0;a<=NETWORK_INTERFACES.length;a++)
              {TA_OUTPUT.append(Integer.toHexString(R[a]&0xff)+":");}
              NetworkInterfaceAddress [] INT = NETWORK_INTERFACES[i].addresses;
              TA_OUTPUT.append("\nIP Address:"+ INT[0].address);
              TA_OUTPUT.append("\nSubnet:"+ INT[0].address);
              TA_OUTPUT.append("\nBroadcast Address:"+ INT[0].address);
              COUNTER++;


        }}
    public void ChooseInterface()
    {
            int temp;
         temp = Integer.parseInt(TF_SelectInterface.getText());
        if(temp>-1&&temp<COUNTER){
        INDEX=temp;
        EnableButtons();
        }
    else
    {
        JOptionPane.showMessageDialog(null,"Out Range. # interfaces = 0-"+(COUNTER-1)+".");

        }
    TF_SelectInterface.setText("");
    ///////////////////////////////////////////////////////////////////////////
}


    }

This is for Threads

import javax.swing.SwingUtilities;

/**
 * This is the 3rd version of SwingWorker (also known as
 * SwingWorker 3), an abstract class that you subclass to
 * perform GUI-related work in a dedicated thread.  For
 * instructions on using this class, see:
 * 
 * http://java.sun.com/docs/books/tutorial/uiswing/misc/threads.html
 *
 * Note that the API changed slightly in the 3rd version:
 * You must now invoke start() on the SwingWorker after
 * creating it.
 */
public abstract class PkPirate_CaptureThread {
    private Object value;  // see getValue(), setValue()
    private Thread thread;

    /** 
     * Class to maintain reference to current worker thread
     * under separate synchronization control.
     */
    private static class ThreadVar {
        private Thread thread;
        ThreadVar(Thread t) { thread = t; }
        synchronized Thread get() { return thread; }
        synchronized void clear() { thread = null; }
    }

    private ThreadVar threadVar;

    /** 
     * Get the value produced by the worker thread, or null if it 
     * hasn't been constructed yet.
     */
    protected synchronized Object getValue() { 
        return value; 
    }

    /** 
     * Set the value produced by worker thread 
     */
    private synchronized void setValue(Object x) { 
        value = x; 
    }

    /** 
     * Compute the value to be returned by the <code>get</code> method. 
     */
    public abstract Object construct();

    /**
     * Called on the event dispatching thread (not on the worker thread)
     * after the <code>construct</code> method has returned.
     */
    public void finished() {
    }

    /**
     * A new method that interrupts the worker thread.  Call this method
     * to force the worker to stop what it's doing.
     */
    public void interrupt() {
        Thread t = threadVar.get();
        if (t != null) {
            t.interrupt();
        }
        threadVar.clear();
    }

    /**
     * Return the value created by the <code>construct</code> method.  
     * Returns null if either the constructing thread or the current
     * thread was interrupted before a value was produced.
     * 
     * @return the value created by the <code>construct</code> method
     */
    public Object get() {
        while (true) {  
            Thread t = threadVar.get();
            if (t == null) {
                return getValue();
            }
            try {
                t.join();
            }
            catch (InterruptedException e) {
                Thread.currentThread().interrupt(); // propagate
                return null;
            }
        }
    }


    /**
     * Start a thread that will call the <code>construct</code> method
     * and then exit.
     */
    public PkPirate_CaptureThread() {
        final Runnable doFinished = new Runnable() {
           public void run() { finished(); }
        };

        Runnable doConstruct = new Runnable() { 
            public void run() {
                try {
                    setValue(construct());
                }
                finally {
                    threadVar.clear();
                }

                SwingUtilities.invokeLater(doFinished);
            }
        };

        Thread t = new Thread(doConstruct);
        threadVar = new ThreadVar(t);
    }

    /**
     * Start the worker thread.
     */
    public void start() {
        Thread t = threadVar.get();
        if (t != null) {
            t.start();
        }
    }
}

Finally this is for the packet content:

import jpcap.PacketReceiver;
import jpcap.packet.Packet;

public class PkPirate_PacketContents implements PacketReceiver
{

    public void receivePacket(Packet packet)
{
    PkPirate_GUI.TA_OUTPUT.append(packet.toString()+
    "\n--------------------------------------------------"+
    "-----------------------------------------------------\n\n");
    }

    }
  • That´s a lot lot of code. Could you remove the unnecessary parts? – SomeJavaGuy Oct 08 '15 at 14:40
  • just a simple typo, you wrote `actionPerforemed` at `B_Capture.addActionListener`, which should be `actionPerformed` –  Oct 08 '15 at 14:40

2 Answers2

1

You have actionPerforemed insted of actionPerformed.

agad
  • 2,192
  • 1
  • 20
  • 32
1

In the below code, actionPerforemed should be actionPerformed instead:

B_Stop.addActionListener(new ActionListener()
{
    public void actionPerforemed(ActionEvent x)
    {   Action_B_Stop(x);}


    });

Any proper IDE should highlight this compile time error to you. Suggest you to use one of them.

Bon
  • 3,073
  • 5
  • 21
  • 40
  • @DanaHassan I'm not sure if you are using any IDE for your development. But you try NetBeans, Ecllipse or Intellij IDEA for java development, it will make your life much easier. – Bon Oct 08 '15 at 15:15
  • Thank you for your advice... I'm new with using a programming language and I don't have the skills to use IDE... but I'm using Text Pad in my works along side Netbeans... but I mostly depend on Text Pad... Thank you again – Dana Hassan Oct 09 '15 at 08:03
  • @DanaHassan no problem, if you found the answers useful, maybe you can accept your favorite one. – Bon Oct 09 '15 at 15:24