简体   繁体   English

请帮助我解决这个JAVA中的异常

[英]Please help me sort out this Exception In JAVA

I am getting following exception. 我正在跟踪异常。 Anyone please help me solve this problem. 有人请帮我解决这个问题。 I am Executing it in netbeans 8 IDE. 我正在netbeans 8 IDE中执行它。 jdk 7 (32 bit).I'm trying to display the console output in a TextArea. jdk 7(32位)。我正在尝试在TextArea中显示控制台输出。

errors: 错误:

Exception in thread "AWT-EventQueue-0" java.lang.RuntimeException: Uncompilable source code - unreported exception java.lang.Exception; must be caught or declared to be thrown
    at NewJFrame.captureActionPerformed(NewJFrame.java:127)
    at NewJFrame.access$000(NewJFrame.java:22)
    at NewJFrame$1.actionPerformed(NewJFrame.java:66)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    at java.awt.Component.processMouseEvent(Component.java:6505)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3320)
    at java.awt.Component.processEvent(Component.java:6270)
    at java.awt.Container.processEvent(Container.java:2229)
    at java.awt.Component.dispatchEventImpl(Component.java:4861)
    at java.awt.Container.dispatchEventImpl(Container.java:2287)
    at java.awt.Component.dispatchEvent(Component.java:4687)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
    at java.awt.Container.dispatchEventImpl(Container.java:2273)
    at java.awt.Window.dispatchEventImpl(Window.java:2719)
    at java.awt.Component.dispatchEvent(Component.java:4687)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
    at java.awt.EventQueue.access$200(EventQueue.java:103)
    at java.awt.EventQueue$3.run(EventQueue.java:694)
    at java.awt.EventQueue$3.run(EventQueue.java:692)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
    at java.awt.EventQueue$4.run(EventQueue.java:708)
    at java.awt.EventQueue$4.run(EventQueue.java:706)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
BUILD SUCCESSFUL (total time: 12 seconds)

SOURCE CODE: 源代码:

import jpcap.*;
import jpcap.NetworkInterface;
import java.io.IOException;
import jpcap.packet.DatalinkPacket;
import jpcap.packet.EthernetPacket;
import jpcap.packet.ICMPPacket;
import jpcap.packet.IPPacket;
import jpcap.packet.Packet;
import jpcap.packet.TCPPacket;
import jpcap.packet.UDPPacket;


/**
 *
 * @author Rahul
 */
public class NewJFrame extends javax.swing.JFrame implements PacketReceiver {
static NetworkInterface [] devices;
    static int j = 0;
    int interface_index;
    String protocoll[] = {"HOPOPT", "ICMP", "IGMP", "GGP", "IPV4", "ST", "TCP", "CBT", "EGP", "IGP", "BBN", "NV2", "PUP", "ARGUS", "EMCON", "XNET", "CHAOS", "UDP", "mux"};

    /**
     * Creates new form NewJFrame
     */
    public NewJFrame() {
        initComponents();
         devices = JpcapCaptor.getDeviceList();

       for (int i = 0; i < devices.length; i++) 
       {
            result.append(i + " :" + devices[i].name + "(" + devices[i].description + ")\n");

        }

    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        capture = new javax.swing.JButton();
        jButton2 = new javax.swing.JButton();
        jScrollPane1 = new javax.swing.JScrollPane();
        result = new javax.swing.JTextArea();
        select = new javax.swing.JButton();
        indexx = new javax.swing.JTextField();
        jLabel1 = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("Packet Analyzer");

        capture.setText("CAPTURE");
        capture.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                captureActionPerformed(evt);
            }
        });

        jButton2.setText("STOP");

        result.setColumns(20);
        result.setRows(5);
        jScrollPane1.setViewportView(result);

        select.setText("Select");
        select.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                selectActionPerformed(evt);
            }
        });

        jLabel1.setText("Enter device index:");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(52, 52, 52)
                        .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 596, Short.MAX_VALUE))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addGap(88, 88, 88)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(indexx))
                        .addGap(18, 18, 18)
                        .addComponent(select)
                        .addGap(113, 113, 113)
                        .addComponent(capture)
                        .addGap(74, 74, 74)
                        .addComponent(jButton2)))
                .addGap(58, 58, 58))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addGap(26, 26, 26)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 164, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 32, Short.MAX_VALUE)
                .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 22, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(capture)
                    .addComponent(jButton2)
                    .addComponent(select)
                    .addComponent(indexx, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(41, 41, 41))
        );

        pack();
    }// </editor-fold>                        

    private void captureActionPerformed(java.awt.event.ActionEvent evt) {                                        
    capturepacket();    

    }                                       

    public void capturepacket() throws Exception    {
        JpcapCaptor jpcap = JpcapCaptor.openDevice(devices[2], 2000, true, 20);

        jpcap.loopPacket(-1, new NewJFrame());

    }
    private void selectActionPerformed(java.awt.event.ActionEvent evt) {                                       
       interface_index = Integer.parseInt(indexx.getText());
       result.setText(" ");
    }                                      

    public void receivePacket(Packet packet) 
    {
        result.append(packet + "\n");
        result.append("this is packet " + j + " :" + "\n");
        j++;

        IPPacket tpt=(IPPacket)packet;
        if (packet != null) 
        {
         int ppp=tpt.protocol;
         String proto=protocoll[ppp];
         result.append("about the ip packet in network layer : \n");
         result.append("\n******************************************************************");
         if(tpt.dont_frag)
         {
          result.append("\ndft bi is set. packet will not be fragmented \n");
         }
         else
         {
          result.append("\ndft bi is not set. packet will  be fragmented \n");
         }
         result.append("\n \n destination ip is :"+tpt.dst_ip);
         result.append("\n\n this is source ip :"+tpt.src_ip);
         result.append("\n\n this is hop limit :"+tpt.hop_limit);
         result.append("\n \n this is identification field  :"+tpt.ident);
         result.append("\n \npacket length :"+tpt.length);
         result.append("\n\n packet priority  :"+(int)tpt.priority);
         result.append("\ntype of service field"+tpt.rsv_tos);
         if(tpt.r_flag)
         {
          result.append("\nreleiable transmission");
         }
         else
         {
          result.append("\nnot reliable");
         }
         result.append("\nprotocol version is : "+(int)tpt.version);
         result.append("\nflow label field"+tpt.flow_label);

         result.append("\n**********************************************************************");

         result.append("\ndatalink level analysis");
         result.append("\n********************************************************************");
         DatalinkPacket dp = packet.datalink;


            EthernetPacket ept=(EthernetPacket)dp;
            result.append("\nthis is destination mac address :"+ept.getDestinationAddress());
            result.append("\n this is source mac address"+ept.getSourceAddress());



System.out.println("*********************************************************************");
result.append("\nthis is about type of packet");
result.append("\n******************************************************************************");

                if (proto.equals(("TCP"))) {
                    result.append(" /n this is TCP packet");
                    TCPPacket tp = (TCPPacket) packet;
                    result.append("\nthis is destination port of tcp :" + tp.dst_port);
                    if (tp.ack) {
                        result.append("\n" + "this is an acknowledgement");
                    } else {
                        result.append("\nthis is not an acknowledgment packet");
                    }

                    if (tp.rst) {
                        result.append("\nreset connection ");
                    }
                    result.append(" \n protocol version is :" + tp.version);
                    result.append("\n this is destination ip " + tp.dst_ip);
                    result.append("\nthis is source ip"+tp.src_ip);
                   if(tp.fin){
                       result.append("\nsender does not have more data to transfer");
                   }
                    if(tp.syn){
                        result.append("\n request for connection");
                    }

                }else if(proto.equals("ICMP")){
                    ICMPPacket ipc=(ICMPPacket)packet;
             // java.net.InetAddress[] routers=ipc.router_ip;
              //for(int t=0;t
                //  System.out.println("\n"+routers[t]);
             // }
              result.append(" \n this is alive time :"+ipc.alive_time);
              result.append("\n number of advertised address :"+(int)ipc.addr_num);
              result.append("mtu of the packet is :"+(int)ipc.mtu);
              result.append("subnet mask :"+ipc.subnetmask);
              result.append("\n source ip :"+ipc.src_ip);
              result.append("\n destination ip:"+ipc.dst_ip);
              result.append("\n check sum :"+ipc.checksum);
              result.append("\n icmp type :"+ipc.type);
              result.append("");


                }else if(proto.equals("UDP")){
                    UDPPacket pac=(UDPPacket)packet;
                    result.append("\nthis is udp packet \n");
                    result.append("\nthis is source port :"+pac.src_port);
                    result.append("\nthis is destination port :"+pac.dst_port);

                }

              result.append("\n******************************************************");

            }




        }


    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new NewJFrame().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JButton capture;
    private javax.swing.JTextField indexx;
    private javax.swing.JButton jButton2;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JScrollPane jScrollPane1;
    public static javax.swing.JTextArea result;
    private javax.swing.JButton select;
    // End of variables declaration                   
}

The error message is fairly clear: 错误消息非常清楚:

unreported exception java.lang.Exception; 未报告的异常java.lang.Exception; must be caught or declared to be thrown 必须被抓住或宣布被抛出

You're calling a method that throws a checked exception, Exception , but you're calling it from code that doesn't catch it, and doesn't report that it (the calling code) throws it. 您正在调用的方法将抛出一个已检查的异常Exception ,但是您是从无法捕获该Exception代码中调用该方法,并且不会报告该异常(调用代码)将其引发。 See this tutorial on the Oracle Java site for details, but basically here's a simple case: 有关详细信息,请参见Oracle Java网站上的本教程 ,但是基本上这是一个简单的情况:

Suppose you need to call the method foo and it's declared like this: 假设您需要调用方法foo ,它的声明如下:

void foo()
throws Exception {
    // ...
}

That says that the code in foo may throw the exception Exception . 那就是说foo中的代码可能会抛出Exception Now, suppose we have this method bar : 现在,假设我们有以下方法bar

void bar() {
    this.foo(); // Problem
}

bar doesn't say it throws Exception , but it calls foo without wrapping that call in a try/catch that catches the exception that foo says it may throw. bar不会说它抛出Exception ,但是它会调用foo而不将其包装在try/catch ,而try/catch会捕获foo可能抛出的异常。 bar either needs to catch the exception and handle it: bar要么需要捕获异常并处理它:

void bar() {
    try {
        this.foo();
    }
    catch (Exception e) {
        // Handle the exception appropriately
    }
}

...or declare that bar may throw the exception: ...或声明bar可能引发异常:

void bar()
throws Exception {
    this.foo(); // Problem
}

You need to catch an exception thrown around your captureActionPerformed call. 您需要捕获在captureActionPerformed调用周围引发的异常。 Use the try-catch structure: 使用try-catch结构:

public void actionPerformed(java.awt.event.ActionEvent evt) {
    try {
        captureActionPerformed(evt);
    } catch (Exception e) {
        e.printStackTrace();
        //and other clean-up tasks
    }
}

Just be aware of actions that throw exceptions and be prepared for your methods to catch them. 只是要注意引发异常的动作,并为您的方法做好准备以捕获异常。

In this function: 在此功能中:

private void captureActionPerformed(java.awt.event.ActionEvent evt) {                                        
  capturepacket();    
}  

You call capturepacket(); 您调用capturepacket(); . However this function may throw Exception and thus for your code to compile you will either have to surround the call with a try-catch block or declare captureActionPerformed to throw Exception in turn. 但是,此函数可能会引发Exception,因此要编译代码,您将必须用try-catch块将调用包围起来,或者声明captureActionPerformed依次引发Exception Keep in mind you will then need to further manage this exception until eventually you catch it somewhere. 请记住,然后您将需要进一步管理此异常,直到最终将其捕获到某个地方。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM