请帮我理清JAVA中的这个例外

时间:2014-03-31 13:59:00

标签: java

我得到以下异常。有人请帮我解决这个问题。我在netbeans 8 IDE中执行它。 jdk 7(32位)。我正在尝试在TextArea中显示控制台输出。

错误:

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)

消息来源代码:

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                   
}

3 个答案:

答案 0 :(得分:1)

错误信息非常清楚:

  

未报告的异常java.lang.Exception;必须被抓住或宣布被抛出

您正在调用一个抛出已检查异常的方法Exception,但是您从没有捕获它的代码中调用它,并且没有报告该异常它(调用代码)抛出它。有关详细信息,请参阅Oracle Java站点上的this tutorial,但基本上这只是一个简单的案例:

假设您需要调用方法foo,并且声明如下:

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

这表示foo中的代码可能会抛出异常Exception。现在,假设我们有这个方法bar

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

bar并不会说它会引发Exception,但它会调用foo而不会将该调用包含在try/catch中,以捕获foo的异常说它可能会抛出。 bar要么需要捕获异常并处理它:

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

...或声明bar可能抛出异常:

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

答案 1 :(得分:0)

您需要捕获captureActionPerformed电话周围的异常。使用try-catch结构:

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

请注意引发异常的行为,并为您的方法做好准备。

答案 2 :(得分:0)

在此功能中:

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

您致电capturepacket();。但是,此函数可能会抛出异常,因此对于您的代码编译,您将需要使用try-catch块包围调用,或者声明captureActionPerformed依次抛出Exception。请记住,您需要进一步管理此异常,直到最终将其捕获到某处。