2015-10-08 4 views
-1

У меня есть эта программа в java .. она предназначена для захвата сетевых пакетов с помощью Winpcap и jpcap ... Во время компиляции возникает проблема .. она отправляет это сообщение :анонимный класс не абстрактный и не переопределяет абстрактный метод

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 
    { 
    ^

может кто-нибудь пожалуйста, скажите мне, как заставить его работать ... здесь полный исходный код программы:

Это для создания графического интерфейса

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


    } 

Это для Темы

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

Наконец это для содержания пакета:

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

    } 
+0

Это код. Не могли бы вы удалить ненужные части? – SomeJavaGuy

+0

просто простая опечатка, вы написали 'actionPerforemed' в' B_Capture.addActionListener', который должен быть 'actionPerformed' – Paul

ответ

0

Вы actionPerfor е мед InstEd из actionPerformed.

+0

Большое спасибо –

0

В коде ниже, actionPerforemed должен быть actionPerformed вместо:

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


    }); 

Любой собственно IDE следует выделить на этот раз ошибка компиляции вам. Предложите использовать один из них.

+0

Большое вам спасибо ... –

+0

@DanaHassan Я не уверен, если вы используете какой-либо IDE для вашего развития. Но вы пытаетесь использовать NetBeans, Ecllipse или Intellij IDEA для разработки Java, это сделает вашу жизнь намного проще. – Bon

+0

Спасибо за советы ... Я новичок в использовании языка программирования, и у меня нет навыков использования IDE ... но я использую Text Pad в своих работах рядом с Netbeans ... но я в основном, зависит от текстовой панели ... Еще раз спасибо –

Смежные вопросы