2012-08-04 2 views
0

Mon code qui est censé capturer le trafic réseau ET l'afficher sur textarea mais il ne le fait pas.Veuillez regarder le code et vérifier s'il y a une correction à être fabriqué.JButton ne fonctionne pas [capture du trafic réseau]

public class NewClass { 

    public static JTextArea textarea = new JTextArea(); 

    NewClass() throws IOException{ 

     JButton capture = new JButton("Capture"); 
     JFrame frame = new JFrame();   
     JScrollPane scroll; 
     NetworkInterface[] NI= JpcapCaptor.getDeviceList(); 
     int INDEX=0; 
     JpcapCaptor JPCAP = JpcapCaptor.openDevice(NI[INDEX], 65536, false, 20); 

     frame.setSize(700,500); 
     frame.setLocation(200,200); 
     frame.getContentPane().setLayout(null); 
     frame.setBackground(Color.yellow);   

     textarea.setEditable(false); 
     textarea.setFont(new Font("Tahoma",0,14)); 
     textarea.setForeground(Color.RED); 
     textarea.setLineWrap(true); 
     //textarea.setBackground(Color.WHITE); 

     scroll = new JScrollPane(); 
     scroll.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); 
     scroll.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); 
     scroll.setViewportView(textarea); 

     frame.getContentPane().add(scroll); 
     scroll.setBounds(10,16,740,290); 

     capture.setBackground(Color.RED); 
     capture.setForeground(Color.GREEN); 
     frame.getContentPane().add(capture); 

     handler ob = new handler(); 
     capture.addActionListener(ob); 
     capture.setBounds(100, 400, 90, 25); 

     frame.setVisible(true); 
    } 

    public class handler implements ActionListener{ 
     public void actionPerformed(ActionEvent Event){ 

      class Print implements PacketReceiver{ 
       public void receivePacket(Packet packet){ 
        String info = packet.toString(); 
        textarea.append(info); 
        //System.out.println(packet.toString()); 
       }      
      } 
    } 
} 
+0

Quelle erreur est affichée? – Reimeus

Répondre

2

Mon code qui est censé capturer le trafic réseau et l'afficher sur textarea mais il ne fait pas it.please jeter un oeil au code et vérifier s'il y a une correction à apporter.

Bien pour un, la méthode actionPerformed de votre gestionnaire ne fait vraiment rien. Elle définit une classe interne, mais ne crée pas des objets de cette classe et ne fait rien avec elle:

public class handler implements ActionListener { 
    public void actionPerformed(ActionEvent Event) { 
    class Print implements PacketReceiver { 
     public void receivePacket(Packet packet) { 
      String info = packet.toString(); 
      textarea.append(info); // System.out.println(packet.toString()); 
     } 
    } 
    } 
} 

Envisager la création d'un objet de votre classe d'impression (un nom terrible pour une classe car il existe déjà une classe d'impression qui fait partie des bibliothèques Java de base) et que cet objet Print fasse quelque chose d'utile, peut-être recevoir des paquets (mais c'est supposé faire cela). Faites attention à ne pas faire de longs processus dans le thread Swing principal, l'EDT cependant, ou vous allez geler votre interface graphique Swing.

Modifier
par exemple,

// note that class names such as "Handler" should begin with a capital letter. 
public class Handler implements ActionListener { 
    public void actionPerformed(ActionEvent Event) { 
    class Print implements PacketReceiver { 
     public void receivePacket(Packet packet) { 
      String info = packet.toString(); 
      textarea.append(info); // System.out.println(packet.toString()); 
     } 
    } 

    // create a Print instance so that it can do something: 
    final Print myPrint = new Print(); 

    // do something with myPrint here so that it gets packets and displays them 
    // I suspect that you'll likely want to do this in a background thread 
    // using a SwingWorker 
    } 
} 
1

comme Hovercraft dit que vous ne faites rien, mais la définition d'une classe interne. ce qui vous manque ici est l'appel à processPacket() ou loopPacket() de votre classe JPCAP. donc ce que je suggère est le suivant:

public class handler implements ActionListener{ 
    public void actionPerformed(ActionEvent Event){ 

    class Print implements PacketReceiver{ 
     public void receivePacket(Packet packet){ 
      String info = packet.toString(); 
      textarea.append(info);            
     } 

    } 

    // this captures 10 packets . 
    JPCAP.processPacket(10,new Print()); 
    } 
} 
+0

'()' ajouté à 'new Print'. Encore une fois, processPacket peut devoir être fait dans un thread d'arrière-plan. 1+ pour les suggestions. –

Questions connexes